mysql - Mysql全文搜索布尔模式按相关性排序而不是我正在寻找的顺序(短语匹配)
问题描述
我有以下查询,相关性排名似乎已关闭。
它排名
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
解决方案
让我们首先分析您使用的条件并按以下方式排序:
MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE)
根据Mysql Boolean Full-Text Searches,您正在匹配包含任何单词的任何文本:
- 苹果手机
- 8
这意味着匹配任何具有iphone OR 8的文本。
你想要的是将“ iphone 8 ”匹配为优先于“iphone”或“8*”的字符串。
为达到这个:
- 添加“iphone 8*”作为匹配的字符串
- 使用> <运算符
- 并优先于“iphone”和“8*”
将sql查询更改为:
AGAINST ('>"iphone 8*" >iphone <8*' IN BOOLEAN MODE)
在选择语句中
这意味着它优先于精确的 iphone 8* 和 iphone超过8*。
推荐阅读
- nginx - API 网关/代理配置中 API 访问令牌的 NGINX 服务调出
- javascript - 努力等待 for 循环
- c# - .net Core 3.1 - 第一页询问语言然后重定向到一个页面
- node.js - 不和谐 Node.js | 将时间添加到嵌入中的时间戳 (v12)
- python - 在 Python 中使用 HTMLParser 提取超链接 URL 和内容
- typescript - vue3 在编辑器本身内将 quill delta 转换为 html
- android - Recyclerview Glide Loadmore 在 Android 中负载太重且滞后
- python - 当我尝试执行 django models migrate 命令 - python manage.py migrate 时出现错误。如何解决这个错误?
- javascript - react-native 中 Material 底部标签栏中的自定义按钮
- python - 如何在列表中的字符串之间添加数字