Реализация MySQL FTS

0

Я работаю над системой билетов в PHP/MySQL. Мы реализовали mysql FTS в логическом режиме, чтобы предоставить пользователям функцию поиска. Пользователь вводит строку поиска, и мы представляем ей список проблем.

Ниже приведен пример схемы базы данных:

issue table - (id, title, описание)
Он имеет индекс fts (название, описание)

issue_comments table - (id, issue_id, комментарий)
Он имеет индекс fts (комментарий)

В каждой проблеме может быть несколько комментариев. Таким образом, в таблице issue_comments может быть несколько строк, соответствующих строке в таблице проблем

Скажите, что пользователь вводит строку поиска - alpha beta​​strong >

PHP скрипт прерывает строку в отдельных словах, добавляет знак + "перед каждым словом и выполняет следующий запрос.

select id as issue_id from issues where match(title, description) against ('+alpha +beta' in      boolean mode)   
    union  
select id as issue_id from issues inner join issue_comments on        issue.id=issue_comments.issue_id where match(comment) against ('+alpha +beta' in boolean mode)

Это ищет все проблемы
имеющие альфа и бета в (название, описание)
или имеющие как альфа, так и бета в одном из комментариев проблемы.

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

Теги:
full-text-search

1 ответ

0

Я еще не пробовал это в реальной жизни, но указание нескольких столбцов также должно работать в логическом режиме:

match (title,comment) against...

нет явного упоминания об этом, но docs рассказывают о строках, которые искали, а не столбцах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню