Кастомные токены для апострофов в SQLite / FTS3 / FTS4 / Android? - PullRequest
0 голосов
/ 24 сентября 2018

Мое приложение Android содержит таблицу SQLite (полнотекстовый поиск / FTS3), которая содержит такие данные, как:

Продукт Грина

В приложении, когда пользовательищет Продукт Грина , совпадение найдено.Но когда пользователь ищет Greens Product (т. Е. Без апострофа), совпадение отсутствует.

Мне нужно, чтобы продукт возвращался независимо от того, введет ли пользователь апостроф или нет.

Итак, я читаю документацию о токенизаторах FTS3 , в которой указывается, что мне нужно указать апостроф в аргументе tokenchars.

Итак, я попытался повторно-создание моей таблицы следующим образом:

CREATE VIRTUAL TABLE products USING fts3 (product_name TEXT, tokenize=simple "tokenchars='");

, но по-прежнему нет совпадений, когда пользователь ищет Greens Product .

I 'Мы также пробовали:

CREATE VIRTUAL TABLE products USING fts3 (product_name TEXT, tokenize=simple "tokenchars=''"); (двойной апостроф)

и

CREATE VIRTUAL TABLE products USING fts4 (product_name TEXT, tokenize=simple "tokenchars='"); (fts4)

и

CREATE VIRTUAL TABLE products USING fts4 (product_name TEXT, tokenize=simple "tokenchars=''"); (двойной апостроф и fts4)

но ни один из них, похоже, не работает для меня.

Я не уверен, что попробовать дальше.И я также не уверен, что могу столкнуться с некоторыми ограничениями из-за реализации SQLite в Android.

У кого-нибудь есть предложения?

1 Ответ

0 голосов
/ 24 сентября 2018

Если вы добавите апостроф к tokenchars, то он станет частью слова.Это означает, что вы должны указать это, чтобы найти его.

Вы действительно хотите игнорировать апострофы, не ломая токены.Кажется, для этого нет встроенной опции;Вы можете написать собственный токенизатор или просто удалить такие символы перед вставкой / поиском строк.

...