SQLite, FTS, MATCH и разделение текста в столбце

У меня есть база данных SQLite с виртуальной таблицей «myTable», созданной с использованием FTS4, с одним столбцом текста «myColumn» с использованием | в качестве разделительного символа.

Я запрашиваю эту базу данных с помощью SELECT * FROM myTable WHERE myColumn MATCH 'out to'; и получаю обращения с записями, которые выглядят как "...out|to...", но без подстрок "out to".

То же самое происходит, когда я заменяю | знаками препинания, например ;. (Обратите внимание, что в документации SQLite явно указано, что вы не можете использовать _ в качестве разделительного символа.)

Почему это так и как это предотвратить?


person SK9    schedule 06.07.2011    source источник


Ответы (1)


Токенизатор FTS по умолчанию удаляет любые знаки препинания из индексированных данных, а также из вашего входного запроса. Он найдет совпадение для записи "... out to ...", даже если вы запросите MATCH 'out/to'. Решением этой проблемы является поиск по фразе, MATCH '"out to"'. Это не сработает, если вы захотите найти эти слова в записи, в которой их нет в указанном порядке.

person Rafael Nobre    schedule 26.10.2011