MySQL 全文搜索和评分

MySQL Full Text Search and Score

我的搜索相关性和过滤器使用全文(匹配)有问题,我将在下面解释。

我有一个名为 Songs 的 table,它包含超过 150 万条记录,这个 table 包含许多列,其中 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,为什么不是,我该如何改进?

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

"Stop words" 是未包含在索引中的词,因此它们在查询和文本中会被忽略。在您的示例中,'came' 是停用词。文档是 here.

最小字长(通常为 4)是考虑的最小字(参见 here)。所以,你查询的是“+glad +you +came +Boyce +Avenue”,但实际上是“+glad +Boyce +Avenue”。我认为这可以解释乐谱的问题。