невозможно получить специальные символы из sqlite fts3 - PullRequest
3 голосов
/ 08 февраля 2012

У меня проблемы со спецсимволами в моем сценарии. У меня есть БД sqlite, созданный с помощью fts3.

Когда я использую SELECT col_1, col_2, offsets(table) FROM table WHERE table MATCH 'h*' LIMIT 50;

Я могу получить слова, которые начинаются с h.

но когда я использую

SELECT col_1, col_2, offsets(table) FROM table WHERE table MATCH '@*' LIMIT 50;

Я не получаю строки, начинающиеся с @.

Куда я иду не так? Любой указатель относительно подхода был бы замечателен.

1 Ответ

0 голосов
/ 19 апреля 2012

Я думаю, что описанное вами поведение происходит потому, что SQLite FTS3 использует токенизатор, который по умолчанию называется "простой" .Символ @ отбрасывается, поскольку не является буквенно-цифровым символом, а его кодовая точка UTF не превышает 127. Моя интерпретация этого заключается в том, что FTS не предназначен для поиска специальных символов, он предназначен для поиска в естественном тексте.

Исправление, которое я предлагаю, заключается не в том, чтобы использовать FTS для такого рода запросов, а в том, чтобы использовать оператор LIKE.Или вы можете попытаться найти другие доступные токенизаторы или написать на C .

...