2016-11-25 7 views
0

У меня возникла проблема с моей релевантной релевантности и фильтрацией с использованием полного текста (совпадение), и я объясню ниже.Полнотекстовый поиск и оценка MySQL

У меня есть таблица под названием «Песни», которая содержит более 1,5 млн записей, эта таблица содержит много столбцов, из которых 2 из них - имя и художник, эти 2 столбца индексируются по полнотекстовым данным.

Когда я ищу название и песню, соответствующие точно значениям, которые показывают низкий балл, и для меня это не имеет никакого смысла, например.

ДАННЫЕ:

name   | artist  
------------- | ------------ 
Glad You Came | Boyce Avenue 

Когда я выполнить запрос ниже он приносит:

SELECT name, artist, 
     MATCH(name, artist) AGAINST('+glad +you +came +Boyce +Avenue' IN BOOLEAN MODE) AS score 
FROM live_lyric.songs 
WHERE MATCH(name, artist) AGAINST('+glad +you +came +Boyce +Avenue' IN BOOLEAN MODE) 


name   | artist  | score 
------------- | ------------ | ------------------ 
Glad You Came | Boyce Avenue | 54.727073669433594 

Я ищу точное соответствие, как же это может быть 54,7 ??

Если удалить + знак как

SELECT name, artist, 
     MATCH(name, artist) AGAINST('glad you came Boyce Avenue' IN BOOLEAN MODE) AS score 
FROM live_lyric.songs 
WHERE MATCH(name, artist) AGAINST('glad you came Boyce Avenue' IN BOOLEAN MODE) 

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

Для меня поиск с знаком «+» должен быть около 100, почему это не так, и как я могу его улучшить?

ответ

1

Два очень важных понятия при использовании полнотекстового поиска - это слова остановки и минимальная длина слова.

«Стоп-слова» - это слова, которые не включены в индекс, поэтому они просто игнорируются в запросе и тексте. В вашем примере 'came' является стопором. Документация: here.

Минимальная длина слова (обычно 4) - это наименьшее слово, которое рассматривается (см. here). Таким образом, вы запрашиваете «+ рад + вы + пришли + Бойс + Авеню», но это действительно «+ рад + Бойс + Авеню». Я думаю, это объясняет проблему со счетом.

+0

Спасибо за ваш ответ, но обе точки, которые я уже проверил .. 1. пришел не стоп слово - 2. мин слово я уже изменил на 2 буквы, поэтому он должен использовать все слова –

+0

Я сделал это, прежде чем я опубликую вопрос –

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