2014-10-09 4 views
1

У меня есть столбец brand_name в таблице brand_names и столбец product_name в моей таблице product_names.SQLite FTS3 - Полнотекстовый поиск по нескольким столам

На данный момент у меня есть два отдельных SELECT (один на brand_names.brand_name и один на product_names.product_name), и я использую UNION для обоих двух результатов. Однако, когда поиск производится для «SomeBrandName Некоторые Имя продукта», даже если такой продукт существует, мой SQL возвращает ноль результатов (это потому, что термины - SomeBrandNameSomeProduct и Name - не все появляются в brand_names.brand_name и они не все появятся в product_names.product_name).

Так мне нужна помощь, чтобы разработать SQLite/FTS3 эквивалент что-то вроде ...

SELECT (brand_names.brand_name || ' ' || product_names.product_name) AS brand_and_product_name FROM brand_names, product_names WHERE brand_and_product_name MATCH 'SomeBrandName Some Product Name'

Какова реальная SQLite/FTS3 SQL, что мне нужно для достижения этой цели?

С точки зрения исследования, я прочитал SQLite FTS3 guide, но не упоминает несколько таблиц.

Я также видел similar question, который немного более продвинутый, и поэтому вполне может быть излишним для простого поиска, которого я пытаюсь достичь здесь.

ответ

0

Поиск FTS может выполняться только в индексах FTS.

Если вы хотите получить результат для «Brand Product», вам необходимо создать таблицу FTS, содержащую эти слова в одной строке. (Чтобы уменьшить объем хранения, попробуйте использовать external content table на вид.)

+0

Спасибо за это! Теперь я переместил столбец brand_name в ту же таблицу, что и столбец product_name. Вы знаете, как я могу выполнить запрос FTS по обоим столбцам? (Не найдено ничего, что помогает здесь - http://www.sqlite.org/fts3.html. –

+0

Документация, связанная с темой, говорит, что MATCH может принимать имя таблицы вместо имени столбца. –

0

Для этого вам необходимо подготовить первые виртуальные таблицы для обеих таблиц. Затем вы можете применять индексированный поиск (поиск FTS) на них, используя соединение, аналогичное тому, которое вы используете для соединения с простой таблицей.

Смежные вопросы