результаты полнотекстового поиска, показывающие, где наиболее повторяющиеся слова

php mysql full-text-search

118 просмотра

1 ответ

Я вставил в свой веб-браузер, и он отлично работает, но он показывает мне грязные результаты, я хотел бы показать мне сверху, где над словом или словами в поиске повторяется.

Я посмотрел онлайн-уроки, но я не могу это сделать и всегда получаю беспорядок, не понимаю, почему.

Прямо сейчас у меня это так:

$sql="SELECT art,tit,tem,cred,info,que,ano,url 
FROM contenido
WHERE MATCH (art,tit,tem,cred,info) 
AGAINST ('" .$busqueda. "' IN BOOLEAN MODE) 
ORDER BY id DESC";

В Интернете не так много информации об уточнении или оптимизации поиска Mysql FULLTEXT. Посмотрим, пройдут ли здесь эксперты, и мы все узнаем.

Как можно уточнить ваш поиск? Спасибо.

Автор: PlayerWet Источник Размещён: 24.10.2019 05:34

Ответы (1)


1 плюс

Решение

Я думаю, проблема в том, что вы сортируете по id.

Полный текст сортируется по счету совпадений, который он рассчитывает, показывая сначала более сильные совпадения. Когда вы подаете заявку ORDER BY id DESC, вы теряете этот порядок сортировки по матчам.

Вы можете увидеть фактический результат в наборе результатов, если хотите:

SELECT art,tit,tem,cred,info,que,ano,url,
      MATCH (art,tit,tem,cred,info) 
      AGAINST ('your term' IN BOOLEAN MODE) AS score
FROM contenido
WHERE MATCH (art,tit,tem,cred,info) 
  AGAINST ('your term' IN BOOLEAN MODE) 
   ORDER BY id DESC

Кстати: используйте подготовленные заявления для части «ваш термин» .

Если в строке поиска есть пробелы, но каждый термин имеет значение, вам нужно рассматривать их как отдельные части. Так что, если важно иметь ОБА "Мерседес" И "Бенц":

  • Не: AGAINST ('Mercedes Benz' IN BOOLEAN MODE)<--- Это означает, что Mercedes или Benz
  • Делать: AGAINST ('+Mercedes +Benz' IN BOOLEAN MODE)

Если вы хотите иметь что-то, что должно иметь первый член, но, необязательно, второй член (ранжирование выше, когда оба найдены):

 AGAINST ('+Mercedes Benz' IN BOOLEAN MODE)

Вот длинный список комбинаций: https://dev.mysql.com/doc/refman/5.6/en/fulltext-boolean.html

И не забывайте, избавьтесь от ORDER BY id DESC. Я думаю, что ваш окончательный запрос должен выглядеть примерно так для "Mercedes Benz"

SELECT art,tit,tem,cred,info,que,ano,url
    FROM contenido
 WHERE MATCH (art,tit,tem,cred,info) 
  AGAINST ('+Mercedes Benz' IN BOOLEAN MODE);

Да, у свободного текста в MySQL есть много причуд, но поэкспериментируйте, вы освоите его.

Автор: Ray Размещён: 08.02.2016 07:45
Вопросы из категории :
32x32