Как создать виртуальную таблицу FTS с внешней таблицей содержимого sqlite? - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу создать виртуальную таблицу SQLite с содержимым реальной.

У меня есть небольшой образец, который демонстрирует мою проблему. Я уже перечитал официальное руководство, но не могу найти ничего плохого в этом коде. Некоторые пользователи используют опцию rebuild, но она не работает для меня.

CREATE TABLE if NOT EXISTS posts (a INTEGER PRIMARY KEY);  
INSERT OR IGNORE INTO posts (a) VALUES(510000);  
INSERT OR IGNORE INTO posts (a) VALUES(510001);  
INSERT OR IGNORE INTO posts (a) VALUES(510300);  
CREATE VIRTUAL TABLE IF NOT EXISTS posts_fts using fts5(content=posts, content_rowid=a, a);  

SELECT * FROM posts_fts where posts_fts MATCH '10' ORDER BY a ASC;

Если я запускаю это, я получаю:

0 rows returned in 2ms from: SELECT * FROM posts_fts where posts_fts match '10' ORDER BY a ASC;

У кого-нибудь есть идея, что я делаю неправильно?

1 Ответ

0 голосов
/ 08 апреля 2019

«10» не является токеном в таблице FTS.

С Документ :

4.3.1. Unicode61 Tokenizer

Токенайзер Unicode классифицирует все символы Unicode как символы «разделитель» или «токен». По умолчанию все пространство и Знаки препинания, определенные в Unicode 6.1, считаются разделители и все другие символы как символы токенов. Больше в частности, все символы Юникода, относящиеся к общей категории начиная с "L" или "N" (букв и цифр, в частности) или до Категории "Co" ("прочие, личного пользования") считаются токенами. Все остальные символы являются разделителями.

Каждый последовательный запуск одного или нескольких символов токена считается быть знаком. Токенайзер нечувствителен к регистру в соответствии с правилами определяется Unicode 6.1.

Также из Документ :

3,2. FTS5 Фразы

FTS-запросы состоят из фраз. Фраза представляет собой упорядоченный список из одного или больше токенов.

Вы можете попробовать «запрос префикса», т.е. MATCH "5*", чтобы увидеть, что вы получите результаты.

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