我在搜索相关性和使用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"。我认为这解释了分数的问题。