Я работаю над системой билетов в PHP/MySQL. Мы реализовали mysql FTS в логическом режиме, чтобы предоставить пользователям функцию поиска. Пользователь вводит строку поиска, и мы представляем ей список проблем.
Ниже приведен пример схемы базы данных:
issue table - (id, title, описание)
Он имеет индекс fts (название, описание)
issue_comments table - (id, issue_id, комментарий)
Он имеет индекс fts (комментарий)
В каждой проблеме может быть несколько комментариев. Таким образом, в таблице issue_comments может быть несколько строк, соответствующих строке в таблице проблем
Скажите, что пользователь вводит строку поиска - alpha betastrong >
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)
Это ищет все проблемы
имеющие альфа и бета в (название, описание)
или имеющие как альфа, так и бета в одном из комментариев проблемы.
Но эта установка имеет ограничение
Я хочу, чтобы проблема попадала в результат поиска, если альфа присутствует в заголовке проблемы, а бета присутствует в одном из своих комментариев. Это невозможно с помощью вышеописанной настройки.
Как я могу достичь этого?
Я еще не пробовал это в реальной жизни, но указание нескольких столбцов также должно работать в логическом режиме:
match (title,comment) against...
нет явного упоминания об этом, но docs рассказывают о строках, которые искали, а не столбцах.