Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: SK9Ответов: 1

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

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

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

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

sqlitefull-text-searchmatch

Ответы

Ответ 1 · рейтинг 1 · Rafael Nobre

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы