首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql全文搜索布尔模式按关联排序,而不是我正在寻找的顺序(短语匹配)

Mysql全文搜索布尔模式按关联排序,而不是我正在寻找的顺序(短语匹配)
EN

Stack Overflow用户
提问于 2019-02-15 14:42:49
回答 1查看 29关注 0票数 1

我有下面的查询和相关的排名似乎是关闭的。

资讯科技

代码语言:javascript
复制
iPhone 5C Used Verizon 8GB 58165 White 

高于

代码语言:javascript
复制
iPhone 8 Front Camera Flex

它似乎要做的是在搜索阶段对单词的数量进行排序。如果单词是相邻的,我想给出更高的相关性(如上面所示)。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-16 20:52:59

让我们先分析一下您使用的条件,并根据以下情况进行排序:

代码语言:javascript
复制
MATCH (phppos_items.name) AGAINST ('iphone 8*' IN BOOLEAN MODE)

根据Mysql布尔全文搜索,您正在匹配任何包含的文本-任何单词的

  • 苹果手机
  • 8

这意味着任何有iphone 8的文本都是匹配的。

您想要的是将"iphone 8“匹配为一个字符串,其优先级高于"iphone”或"8*“。

为实现这一目标:

  • 添加"iphone 8*“作为要匹配的字符串
  • 使用> <运算符
  • 给它一个优先级的,而不是"iphone“和"8*”

将sql查询更改为:

代码语言:javascript
复制
AGAINST ('>"iphone 8*" >iphone <8*' IN BOOLEAN MODE)

在select语句

这意味着它给予的优先权是精确iphone 8*和iphone,而不是8*

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54711658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档