FTS sqlite поиск фразы по одному столбцу невозможен - PullRequest
2 голосов
/ 03 апреля 2012

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

SELECT * from ftstable where ftstable MATCH '"Phrase With Spaces In It"';

и для определенного столбца:

SELECT * from ftstable where body MATCH '"Phrase With Spaces In It"';

, но не работает для агрегированного поиска в двух столбцах, таких как:

SELECT * from ftstable where ftstable MATCH 'body:"Phrase With Spaces In It" title:"The*"';

и вместо этого бросает:

Error: malformed MATCH expression: [body:"Phrase With Spaces In It" title:"The*"]

Я нашел эту ветку, утверждая, что это невозможно (ноябрь 2011 г.): http://osdir.com/ml/sqlite-users/2011-11/msg00363.html. Кто-нибудь знает, возможно ли это сейчас?

Я могу только представить обходной путь, использующий «INTERSECT», но проблема в том, что получающиеся два набора, которые пересекаются, слишком велики, и запрос будет намного медленнее и память неэффективна, тем более, что я развернул его на мобильном устройстве.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 апреля 2012

Вы пробовали:

SELECT * FROM ftstable WHERE (ftstable MATCH 'body:"phrase with spaces in it"') AND (ftstable MATCH 'title:The*')
1 голос
/ 21 августа 2015

Любой фильтр со спецификатором столбца не может содержать пробелов. Это просто не работает. Это странно, но правда. col1: abc работает, col1: abc - нет. col1: «abc 123» нет (он просто сопоставляет любой столбец с «abc 123» внутри него).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...