MySQL全文搜索和分数



我在搜索相关性和使用fultText(匹配)过滤时遇到问题,我将在下面解释。

我有一个名为"歌曲"的表,其中包含超过150万的记录,该表包含许多列,其中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,为什么不这样做?

使用全文搜索是停止单词和最小单词长度时的两个非常重要的概念。

"停止单词"是索引中未包含的单词,因此在查询和文本中简单地忽略了它们。在您的示例中,'came'是一个停止字。文档在这里。

最小单词长度(通常为4)是所考虑的最小单词(请参见此处)。因此,您的疑问是" Glad 您 Come Boyce Boyce Avenue",但它确实是" Glad Boyce Boyce Avenue"。我认为这解释了分数的问题。

相关内容

  • 没有找到相关文章

最新更新