搜索结果正在快递途中

elasticsearch如何仅返回最大的词条个数的数据?

Elasticsearch | 作者 chenkongzhang | 发布于2020年06月23日 | 阅读数:1498

现有文档如下:
1.苹果手机充电线一条
2.苹果手机ipnonex充电线
3.苹果手机iphonex
4.进口苹果
4.安卓充电线
5.苹果苹果苹果
6.苹果手机手机壳

 搜索 苹果手机充电线 ,es分词结果为["苹果", "手机", "充电线"],各个匹配情况为
1.苹果手机充电线一条             ["苹果", "手机", "充电线"] 3个
2.苹果手机ipnonex充电线       ["苹果", "手机", "充电线"] 3个
3.苹果手机iphonex                 ["苹果", "手机"] 2个
4.进口苹果                              ["苹果", "手机"] 1个
5.安卓充电线                           ["充电线"] 1个
6.苹果苹果苹果                       ["苹果"]1 个
7.苹果手机手机壳                    ["苹果", "手机"]2 个

会搜出数据库中这些数据,但我只需要匹配分词数量最多的1号文档和2号文档(匹配到3个词条),而不需要其他文档,因为他们的匹配数都只有1个或2个。
假设没有1号,2号文档,同样搜索  苹果手机充电线 ,返回的也只需要返回3号,7号文档,因为它匹配的个数为2个最多。其他文档匹配数为1不显示。
另外,6号文档中多次出现苹果也能算是一个分词,而7号文档多次出现手机也只能算一个 手机 分词。
已邀请:

laoyang360 - 《一本书讲透Elasticsearch》作者,Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

min_should_match

murphy

赞同来自:

用minimum_should_match可以设定匹配分词数量。
在这个例子里,
如果设置为3,会返回至少有匹配三个分词的文档,返回文档1。但如果文档1不存在,文档2不会返回的。 --- 不符合要求
如果设置为2,会返回至少有匹配两个分词的文档,返回文档1和2。期望是文档1存在,文档2并不返回。 --- 不符合要求
 
也许,可以试一下Elasticsearch的_msearch。
查询两次(第一个设置为3,第二个设置为2),如果第一个查询有结果,丢掉第二个查询的结果。
 
这个办法并不好,希望有更好的解决方案。
 
 

要回复问题请先登录注册