Поиск

Полнотекстовый поиск с расширением запроса

Начиная с MySQL 4.1.1, полнотекстовый поиск поддерживает расширение запроса (в частности, вариант "слепого расширения запроса" (blind query expansion)). Это приме­нимо, как правило, когда поисковая фраза слишком короткая, что часто означает, что пользователь полагается на некие подразумеваемые знания, которых механизм полно­текстового поиска обычно не имеет. Например, пользователь, выполняя поиск по слову "database", может иметь в виду, что фразы с "MySQL", "Oracle", "DB2" и "RDBMS" должны соответствовать поисковому слову и быть также возвращены. Это подразуме­ваемое знание.
Слепое расширение запроса (также известное, как автоматическая релевантная об­ратная связь (automatic relevance feedback)) осуществляется путем добавления WITH QUERY EXPANSION следом за искомой фразой. Это работает за счет выполнения двойного поиска — когда к искомой фразе при втором проходе добавляются несколько документов из вершины списка, сгенерированного на первом проходе. Таким образом, если один из этих документов содержит слово "database" и слово "MySQL", второй проход поиска обнаружит документы, содержащие "MySQL", даже если в них не будет "database". Сле­дующий пример демонстрирует эту разницу:
mysql> SELECT * FROM articles
-> WHERE MATCH (title,body) AGAINST ('database') ;


Технику, представленную во втором примере, можно использовать для поиска книг, скажем, Жоржа Сименона о комиссаре Мегрэ, когда пользователь не знает точно, как пишется "Мегрэ". Поиск по "Megre and the reluctant witnesses" найдет только "Maigret and the Reluctant Witnesses" без расширений запроса. Поиск с расширением запроса най­дет все книги со словом "Maigret" на втором проходе.
На заметку!
Поскольку слепое расширение запроса имеет тенденцию ощутимо увеличивать количество "шу­ма", возвращая нерелевантные документы, это имеет смысл применять, только когда поисковая фраза достаточно короткая.