我在下面查询,相关性排名似乎已关闭。
排名
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
答案 0 :(得分:1)
让我们首先分析您使用的条件,并按照以下条件进行排序:
MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE)
根据Mysql Boolean Full-Text Searches,您正在匹配包含 ANY 个单词的所有文本:
意味着所有具有 iphone OR 8 的文本。
您想要的是将“ iphone 8 ”匹配为优先于“ iphone”或“ 8 *”的字符串。
要实现这一目标:
将sql查询更改为:
AGAINST ('>"iphone 8*" >iphone <8*' IN BOOLEAN MODE)
在选择语句中
表示优先于 8 * 使用精确的iPhone 8 *和iphone 。