2009-04-28 2 views
1

Я работаю над функциями поиска на своем веб-сайте. Я хочу обеспечить лучший механизм поиска для пользователей. Я использую PHP/MYSQL.Поиск в MySQL FullText?

Предположим, что пользователь искал «спорт».

У меня есть 30 записей со словом «спорт» и 5 записей со словом «спорт», но когда я ищу спорт, то следующий запрос возвращает результат 30, у которого есть слово «спорт». Но на самом деле я считаю, что лучший способ обеспечить хороший результат поиска - отобразить все 30 + 5 записей, все записи имеют спорт или спорт.

SELECT DISTINCT p.id, p.title, p.descr, p.tags FROM pdata p WHERE MATCH (p.title, p.tags, p.descr) AGAINST ('sport') 

Пожалуйста скажите мне некоторые статьи или несколько советов & трюков с помощью которых я буду в состоянии обеспечить хорошую функциональность поиска.

ответ

2
...MATCH (p.title, p.tags, p.descr) AGAINST ('sport*' IN BOOLEAN MODE) 

Может сделать трюк.

Редактировать, MySQL documentation - отличный ресурс для таких проблем! :)

+0

Хит цель :) ничего себе. Привет, он работает отлично. Но я не понимаю, почему раньше я не предоставлял данные (без * и IN BOOLEAN MODE)? Пожалуйста, скажите мне. – Prashant

+0

Но возникает еще одна проблема. Когда я ищу AGAINST ('ipl *' IN BOOLEAN MODE), то возвращается только один результат, тогда как у меня есть 5 записей, которые имеют слово «ipl» в заголовках, тегах и столбцах descr. Тогда почему его единственный возвращающий один результат. и когда я ищу «ICL», тогда возвращается 0 результатов, тогда как у меня есть одна запись, в которой есть ICL. – Prashant

0

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

0

В вашем случае я бы сделать следующий запрос:

ВЫБРАТЬ p.id, p.title, p.descr, р .tags ОТ PDATA р ГДЕ (p.title КАК '% СПОРТ%' ИЛИ ​​p.tags LIKE '% SPORT%' ИЛИ ​​ p.descr LIKE '% SPORT%')

Этот запрос будет найти любые предметы, охватывающие спортивные магазы, летние виды спорта.

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