MySQL全文搜索布尔模式按相关性而不是我要的顺序排序(短语匹配)

时间:2019-02-15 14:42:50

标签: mysql full-text-search

我在下面查询,相关性排名似乎已关闭。

排名

iPhone 5C Used Verizon 8GB 58165 White 

高于

iPhone 8 Front Camera Flex

似乎正在做的是对搜索阶段中单词计数的次数进行排名。如果单词彼此相邻(如上所示),我想赋予更高的相关性

SELECT phppos_items.name, MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE) as rel 
FROM phppos_items
WHERE MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE)
ORDER BY `rel` DESC;

结果(太大,无法粘贴)

https://gist.github.com/blasto333/d8f8fe470cc1cfb1f959922ea77f8134

1 个答案:

答案 0 :(得分:1)

让我们首先分析您使用的条件,并按照以下条件进行排序:

MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE)

根据Mysql Boolean Full-Text Searches,您正在匹配包含 ANY 个单词的所有文本:

  • iphone
  • 8

意味着所有具有 iphone OR 8 的文本。

您想要的是将“ iphone 8 ”匹配为优先于“ iphone”或“ 8 *”的字符串。

要实现这一目标:

  • 添加“ iphone 8 *”作为字符串以匹配
  • 使用 > << / em> 运算符
  • 并通过“ iphone”和“ 8 *”为其赋予优先级

将sql查询更改为:

AGAINST ('>"iphone 8*" >iphone <8*' IN BOOLEAN MODE)

在选择语句中

表示优先于 8 * 使用精确的iPhone 8 *和iphone 。