愚者求师之过,智者从师之长。

关于elasticsearch查询优化问题

匿名 | 发布于2017年10月18日 | 阅读数:2469

在使用java api做查询时,主要涉及到多个字段A、B、C...,如果想使查询结果优先出现匹配到A,B,C...该怎么调用???目前用QueryBuilders.queryStringQuery()这个方法做,也就是自己拼接检索语句,但是权重值大小不好控制,有没有更好的方法
已邀请:

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

赞同来自:

使用boost.提升权重试试

napoay

赞同来自:

字段权重的设置一般有2种方法:一是索引时在mapping中指定(不推荐,后期无法修改),二是查询时指定。
 

zhaojiweiwin

赞同来自:

1.特定业务,类似于学术搜索,规则特定的可以预先在mapping中设置好权重,毕竟文献类的检索期望基本是固定的(如:标题,关键词,作者,文本 权重设置 boost默认1.0 标题可适当提升几倍如 4.0,关键词 3.0 文本默认1.0)
2.日志类,可采用动态查询指定

hapjin

赞同来自:

总体思路是:采用 Bool query 在基准查询上对得分进行加法放大。
 
首先,有个基准查询,可以用multi_match 针对多个字段:A、B、C、D...查询,这个查询子句会得出一个基本评分。
然后,再设置一个"放大查询",针对性地对:重点字段(比如A、B),使用boost放大。
最后,通过bool query将 基准查询和放大查询组合起来。

要回复问题请先登录注册