SQLite Полнотекстовый поиск: найдите строки, которые являются ключевыми словами - PullRequest
2 голосов
/ 09 мая 2011

У меня есть следующие таблицы:

-- table to keep articles titles
CREATE TABLE articles(id, title);
insert into articles (id,title) values (1,'sqlite example');
insert into articles (id,title) values (2,'sqlite query ');
insert into articles (id,title) values (3,'erlang example ');
insert into articles (id,title) values (3,'erlang otp ');

-- table to keep keywords that we would like to search.
create table keywords(id,keyword);
insert into keywords (id,keyword) values  (1,'sqlite');
insert into keywords (id,keyword) values  (2,'otp');


-- full text search table - copy of articles.

create virtual table articles_fts using fts4 (id,name);

-- populate table with articles titles.
insert into articles_fts(id,name) select id,title from articles;

Теперь я хотел бы найти ВСЕ статьи , которые содержат любое из указанных ключевых слов.

Запрос типа:

select * from articles_fts 
  where name match (select keyword from keywords);

возвращает только заголовки с sqlite (первое ключевое слово), поэтому другие записи таблицы ключевых слов игнорируются.

Вопрос: Как найти все статьи, содержащиелюбое из указанных ключевых слов?Спасибо.

1 Ответ

2 голосов
/ 09 мая 2011

Использование

select *
  from articles_fts
 WHERE articles_fts MATCH ( select group_concat(keyword, ' OR ')
                              from keywords
                             group by 'x' )

Функция group_concat объединяет все ключевые слова с запятой. Если вы замените запятые на OR, это должно привести к хорошему запросу FTS.

Также см. Раздел 3 из ссылки на функцию полнотекстового поиска относительно ключевого слова OR и ссылки для статистических функций .

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