2013-02-14 2 views
0

Я создаю функцию поиска, которая должна искать по некоторым таблицам. Сначала я добавил индекс FULL TEXT для всех полей, которые нужно искать (так что 1 индекс для нескольких полей).Правильный подход к полнотекстовому поиску

Тогда в моем PHP, я следующий запрос

SELECT * FROM table WHERE MATCH (field1, field2, field3) AGAINST('search word') 

Является ли это правильный подход? Или я должен добавлять индексы по каждому полю отдельно, также разделяя запрос (MATCH (field1) AGAINST ... OR MATCH (field2) AGAINST...).

В чем разница между этими двумя?

ответ

1

Насколько я знаю, метод FULL TEXT index + MATCH действителен и не должен иметь никаких проблем. Просто убедитесь, что ваши 3 поля - CHAR, TEXT или VARCHAR.

Возможно, вам будет интересно также получить «оценку» MATCH. Это можно сделать следующим образом:

SELECT *, MATCH (field1, field2, field3) AGAINST('search word') as score FROM table WHERE MATCH (field1, field2, field3) AGAINST('search word') ORDER BY score 

Этот «счет» расскажет вам, насколько хорош каждый из найденных совпадений.

Возможно, вы также должны посмотреть на IN BOOLEAN MODE. Вы должны положить это прямо после частицы AGAINST (AGAINST('search word') IN BOOLEAN MODE), она будет принимать во внимание операторов в поиске, похожих на поиск Google.

Например:

+ таблица: слово «таблица» должны появиться во всех матчах.

~ таблица: слово «таблица» не должно отображаться в любом совпадении.

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