Android Sqlite FTS НЕ работает
Я пытаюсь заказать быстрый текстовый поиск, чтобы точные совпадения были первыми, а частичные совпадения - последними.
Я создал запрос, который работает в SQLiteStudio:
SELECT value, 1 AS _order FROM glossfts
WHERE glossfts.value MATCH 'dog'
UNION
SELECT value, 2 AS _order FROM glossfts
WHERE glossfts.value MATCH 'dog* NOT dog'
ORDER BY _order
Так что результат будет
Beware of dog 1
Disliked by everybody, not even a dog will eat 1
Bad dog 1
Creed, dogma 2
Dogs 2
Dogwood 2
И это прекрасно работает, но когда я использую тот же запрос в Android, я получаю только
Beware of dog 1
Disliked by everybody, not even a dog will eat 1
Bad dog 1
Disliked by everybody, not even a dog will eat 2
назад, как кажется, интерпретирует:
MATCH 'dog* NOT dog'
как
MATCH 'dog* not dog'
В чем дело?
2 ответа
Android FTS использует стандартный синтаксис запроса, не улучшенный.
Таким образом, он не распознает "НЕ" или "И" в качестве операторов. Это на самом деле пытается сопоставить их с текстом ваших столбцов БД. Вот почему на Android ваше единственное совпадение было получено из записи с "not" в реальном тексте.
Вы должны использовать "-" для НЕ и пробел для AND. Таким образом, ваш синтаксис должен выглядеть так:
ГДЕ глянец.значение МАТЧ 'собака * -дог'
По-видимому, SQLite на этом устройстве Android был скомпилирован с другим синтаксисом запросов FTS.
Проверьте вывод PRAGMA compile_options;
за ENABLE_FTS3_PARENTHESIS
и скорректируйте свои запросы соответственно.