Нерелевантные результаты в полнотекстовом поиске mysql

#mysql #full-text-search

Вопрос:

У меня есть таблица Mysql, настроенная для полнотекстового поиска как по заголовку, так и по столбцам содержимого (тела).

Я пытаюсь вывести наиболее релевантные результаты на вершину, но получаю много мусора.

У меня есть 3 полнотекстовых индекса, один для заголовка, один для основного текста и один как для заголовка, так и для основного текста, поэтому я могу выполнить следующий запрос:

 SELECT id, url, title, body, earliestCapture, responseYear, urlScore,
  MATCH (title) AGAINST ("jurassic park" IN BOOLEAN MODE) AS titleScore,
  MATCH (body) AGAINST ("jurassic park" IN BOOLEAN MODE) AS bodyScore,
  (SELECT (titleScore * 100   bodyScore)) AS finalscore
    FROM Entries
    WHERE MATCH (title,body) AGAINST ("jurassic park" IN BOOLEAN MODE) 
    ORDER BY finalScore DESC LIMIT 0,1000;
 

Я пытаюсь умножить оценку названия на 100, чтобы вывести примеры, когда термин находится в названии, на первое место.

Это действительно помогает, но если в тексте слово park повторяется много раз, даже если оно не Jurassic появляется ни разу, эта строка выводится в начало результатов поиска.

Отличный пример этого-когда я ищу «intel pentium». Есть несколько строк с телами, в которых слово используется intel в контексте разведки/информации , а не в названии компании, это слово повторяется сотни раз, и хотя экземпляров этого слова нет pentium , эти страницы всегда находятся вверху.

Меня это действительно начинает раздражать. Кто-нибудь знает, как улучшить результаты поиска?

Спасибо!

Ответ №1:

вам нужно добавить к обоим поисковым запросам, чтобы отображались только те результаты, которые имеют оба см. Руководство

 SELECT id, url, title, body, earliestCapture, responseYear, urlScore,
  MATCH (title) AGAINST (" jurassic  park" IN BOOLEAN MODE) AS titleScore,
  MATCH (body) AGAINST (" jurassic  park" IN BOOLEAN MODE) AS bodyScore,
  (SELECT (titleScore * 100   bodyScore)) AS finalscore
    FROM Entries
    WHERE MATCH (title,body) AGAINST (" jurassic  park" IN BOOLEAN MODE) 
    ORDER BY finalScore DESC LIMIT 0,1000;
 

Комментарии:

1. Вы хотите сказать, что я должен добавить это в свой код перед отправкой запроса? Что делать, если пользователь вводит символы и — в поле поиска?

2. Вы читали руководство по поиску полнотекстовых индексов, так как я разместил ссылку на него, минус исключил бы слово, поэтому у вас должен быть графический интерфейс, в котором вы можете добавлять все или некоторые символы, перечисленные в ссылке, и не разрешать ввод или вывод — вообще в тексте поиска. пожалуйста, перейдите по ссылке и внимательно прочитайте ее

3. Я понимаю, как это работает, я просто говорю, что если пользователь просто наберет «Парк Юрского периода» в поиске, они, вероятно, ожидают, что результаты с обоими словами появятся вверху, поэтому, если я добавлю программно, мне интересно, что я буду делать, если пользователь действительно введет эти символы.

4. нет,. iimdb использует эластичный поиск и сортировку с «значением релевантности» по убыванию, поэтому при двух словах в нем должно быть больше числа, чем только одно слово, но это не то, что вы просили