0

全文検索に問題があります。検索するときは最初の単語を検索するだけです。たとえば「プロジェクトテスト」を検索すると、プロジェクトを検索するだけで見つけることができますが、「テスト」を検索しようとすると見つかりません。コードを教えてください。

public static Cursor fetchProjectCursor(String name)
        throws IllegalAccessException, InstantiationException {

    Cursor cursor = DataBaseUtil.dataBaseAccess().query(
            _PROJECT_TABLE,
            _FIELD_NAME,
         "(" + _NAME + ")" + " LIKE " +  "(" + "\""
                + name + "%" + "\"" + ")", null, null, null, _MODIFIED_DATE);

    return cursor;
}

私を助けてください

4

3 に答える 3

0

名前の前に「%」を追加する必要があります。

Cursor cursor = DataBaseUtil.dataBaseAccess().query(
            _PROJECT_TABLE,
            _FIELD_NAME,
         "(" + _NAME + ")" + " LIKE " +  "(" + "\"" + "%"
                + name + "%" + "\"" + ")", null, null, null, _MODIFIED_DATE);

または

これを試して。

return db.rawQuery("select * from your_table_name where column_name like ?", new String[] {"%"+name+"%"});

カーソルを返します。

于 2012-09-04T08:42:35.860 に答える
0

次のように、nameパラメータの前に「%」を追加してみてください。

public static Cursor fetchProjectCursor(String name)
        throws IllegalAccessException, InstantiationException {

    Cursor cursor = DataBaseUtil.dataBaseAccess().query(
            _PROJECT_TABLE,
            _FIELD_NAME,
         "(" + _NAME + ")" + " LIKE " +  "(" + "\"" + "%"
                + name + "%" + "\"" + ")", null, null, null, _MODIFIED_DATE);

    return cursor;
}
于 2012-09-04T08:43:31.983 に答える
0

SQLiteでのビルドインフルテキストサポートをご覧ください。

CREATE VIRTUAL TABLE mytable USING fts3 (text TEXT);
SELECT * FROM mytable WHERE text MATCH "text to match";

INTEGERを宣言した場合でも、fts3仮想テーブル内ではすべてのテーブルがTEXTになります。したがって、テーブルを2つのテーブルに分割すると役立つ場合があります。少しの作業が必要ですが、分割はデータベースレイヤーで実行できます。しかし、結果はより良くなります。行数と行数を増やすと、速度が大幅に向上します。

于 2012-09-05T06:33:57.333 に答える