ES查询优化-number避免使用term查询

ES5之后,数值类型应该避免term查询

https://t.zsxq.com/fhroW

使用term会拖慢查询

ES5.X之后,数值类型并没有采用倒排索引, 而是以value为序,将docid切分到不同的block里面。

数值型字段的TermQuery被转换为了PointRangeQuery。这个Query利用Block k-d tree进行范围查找速度非常快,但是满足查询条件的docid集合在磁盘上并非向Postlings list那样按照docid顺序存放,也就无法实现postings list上借助跳表做蛙跳的操作。 要实现对docid集合的快速advance操作,只能将docid集合拿出来,做一些再处理。

优化:

数值类型,且查询时一般使用term查询,比如status字段、deleted字段等,应该设计为keyword类型。
如果已经无法变更类型或者加字段了,那么可以改为range查询,或者给字段加类型

"remark" : { 
	"type" : "text", 
	"fields" : { 
		"keyword" : { 
			"type" : "keyword", 
			"ignore_above" : 256 
		} 
	}, 
	"analyzer" : "like_analyzer" 
}

加字段后改造查询

QueryBuilders.termQuery("stauts.keyword",1);

或者不加类型,改为range查询也会更快

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值