Многократное совпадение столбцов в FTS3 - PullRequest
2 голосов
/ 04 ноября 2011

У меня есть простая база данных из трех столбцов: заголовок, данные, информация. Я храню их в базе данных SQLite FTS3, чтобы я мог легко выполнять полнотекстовый поиск. Я основывал свое приложение на примере Словаря с возможностью поиска из Android. Одна вещь, которую я не могу понять, как это сделать, это как искать (сопоставлять) по двум столбцам. Я в основном хочу взять запрос и искать его в заголовке и столбцах данных. Ниже приведен метод, который готовит запрос:

public Cursor searchMatches(String query, String[] columns) {
    String selection = KEY_TITLE + " MATCH ?";
    String[] selectionArguements = new String[] {query + "*"};
    return query(selection, selectionArguements, columns);
}

Если я не буду следовать этому точному формату KEY_TITLE + " MATCH ?" для выбора, больше ничего не будет работать, несмотря на то, что в документе FTS3 сказано, что могут работать другие способы. Как настроить этот выбор в Android для поиска по двум столбцам? Я попытался добавить OR, но я просто получаю ошибку логики SQL. Большое спасибо!

Ответы [ 3 ]

1 голос
/ 08 ноября 2011

Хорошо, я нашел работоспособное решение, хотя оно не самое красивое. Он включает использование UNION для простого объединения двух MATCH запросов.

    String wordQuery = builder.buildQuery(null, KEY_WORD + " MATCH '" + query + "*'", null, null, null, null, null);
    String definitionQuery = builder.buildQuery(null, KEY_DEFINITION + " MATCH '" + query + "*'", null, null, null, null, null);
    String unionQuery = builder.buildUnionQuery(new String[] {wordQuery, definitionQuery}, null, null);
    Cursor result = helper.getReadableDatabase().rawQuery(unionQuery, null);
0 голосов
/ 24 ноября 2015

Вот как я это делаю

select * from table_name where table_name match 'YOURSEARCHSTRING'
0 голосов
/ 04 ноября 2011

Вам нужно написать собственную функцию запроса. Вы хотите, чтобы ваш запрос выглядел примерно так:

 select * from table_name where title equals ? or info equals ?

Вы не можете просто добавить или к равной части утверждения (распространенная ошибка).

...