好的想法是十分钱一打,真正无价的是能够实现这些想法的人。

请教es搜索时能不能一次查询出这样的结果(或者其他办法)

Elasticsearch | 作者 shengtu0328 | 发布于2021年07月05日 | 阅读数:1600

系统里搜索 上海市免费停车场的时候,期望结果从第一页到最后一页如下
1:上海市and免费and停车场
2:上海市and停车场 or 免费and停车场
3:停车场 or 上海市 or 免费

bool查询多次可以达到这样的结果,但是分页需要手动处理,而且还要mustnot 上一层出现的数据id,这么做感觉很麻烦,
而且如果用户搜一个特别长的词,分出来的词语好几个会更加难以处理。


es有默认的相关性评分 比如match一个搜索词的时候,直接用match的结果顺序返回。


es能把这三种查询在一次结果里按照顺序返回结果吗(或者说有什么替代的查询方式吗)

已邀请:

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

赞同来自: shengtu0328

这个问题的本质就是多个条件查询后的结果返回的问题。
更进一步说,您有三个条件想依据三个条件的顺序返回。
 
建议:
1、全局考虑问题,三个条件做bool组合。
2、返回结果就是期待的总的结果,又因为返回的结果是基于评分的(假定未做不去评分的限制,如:不用filter)
3、那么其实结果就是你想要的结果,不过是三个组合条件bool组合后的检索结果。

HelloClyde

赞同来自: shengtu0328

在外部分完词,把权重带进去就行了
 
比如上海市/免费/停车场
加上权重后: 上海市^10 OR 免费^5 OR 停车场^20
 
权重你可以离线算idf,或者别的text rank的方式再➕一些规则

tongchuan1992 - 学无止境、学以致用

赞同来自:

我了解es你直接搜索 上海市免费停车场 也是分词后按照你得那个方式进行结果返回的吧,都是得分最高的排在前面,如果默认权重不满意,你只要设置好权重就行,

要回复问题请先登录注册