2010-12-13 12 views
2

私はAndroidアプリケーションでsqlite FTS3データベースを使用しています。Androidでsqlite(FTS付き)を使用

public Cursor getWordMatches(String query, String[] columns) { 
     String selection = KEY_WORD + " MATCH ?"; 
     String[] selectionArgs = new String[] {query+"*"}; 
     return query(selection, selectionArgs, columns); 
    } 

.....

private Cursor query(String selection, String[] selectionArgs, String[] columns) { 
    SQLiteQueryBuilder builder = new SQLiteQueryBuilder(); 
    builder.setTables(FTS_VIRTUAL_TABLE); 
    builder.setProjectionMap(mColumnMap);  

    Cursor cursor = builder.query(mDatabaseOpenHelper.getReadableDatabase(), 
      columns, selection, selectionArgs, null, null, null); 

    if (cursor == null) { 
     return null; 
    } else if (!cursor.moveToFirst()) { 
     cursor.close(); 
     return null; 
    } 
    return cursor; 
} 

私は、クエリを作成し、 '家' を検索した場合、私はなります:

household 
house 
apartment house 
big house 

を(私はに家を持っているすべてを取得していますそれで、正規表現でハウス

私のクエリでこのような結果を得るにはどうすればいいですか?

household 
house 

(だから私は唯一*正規表現の家に家で始まる結果を、したい)

私は文と同様に使用している場合(デシベルは200000行を持っているかもしれないので)私のAndroid用アプリケーションFORCEが閉じます。 私はどういうわけかMATCHとLIKE文を組み合わせるべきですか? Androidでこれを行うことも可能ですか?もし私がこのクエリから得た後、カーソル上でいくつかの正規表現を実行しようとするべきではないのであれば?

+0

力のスタックトレースを完全に投稿してください。 –

+0

LIKEを使用する場合: 文字列選択= KEY_WORD + "LIKE"; String [] selectionArgs = new String [] {"'" +クエリ+ "%" "}; 12-13 21:11:50.756:ERROR/AndroidRuntime(267):android.database.sqlite.SQLiteException:near ")これはエラーです(完全なスタックトレースが必要な場合は、 ":構文エラー:、コンパイル中:SELECT rowid AS _id、suggest_text_1、suggest_text_2 FTSdictionary WHERE(suggest_text_1 LIKE) – stratocaster

答えて

0

フルテキスト検索テーブルは、LIKEクエリが最初にFTSテーブルを作成する目的を無効にするテーブルのフルスキャンを実行するため、常にMATCHとLIKEを使用する必要があります。あなたの問題を解決するために

、あなたのFTSテーブルを作成するときに、デフォルト以外のトークナイザを使用しようとする:デフォルトでは

-- Create a table using the simple tokenizer. 
CREATE VIRTUAL TABLE simple USING fts3(tokenize=porter); 

、SQLiteはしたくない試合を生成することができるシンプルなトークナイザを使用しています。ポータートークナイザに切り替えて、何が起こるかを確認します。最悪の場合、独自のカスタムトークナイザを実装できます。詳細は、SQLite documentationを参照してください。

+2

私は、デフォルトのトークナイザが「シンプル」だと思っていました。 –

+0

@Tedありがとう、私はそれを後方に持っていた。 –

+0

はいTedのデフォルトトークナイザはシンプルです –

関連する問題