es查询大文本效率_es中terms查询速度能否优化

es表结构如下:PUT demo/

{

"mappings": {

"demo": {

"_all": {

"enabled": false

},

"properties": {

"aId": {

"type": "keyword"

},

"cId": {

"type": "keyword"

}

}

}

}

}

插入:按照如上单独aId和cId存储为一个doc

查询:每次传入一个aId和1000个cId的列表,返回es中匹配的aId+cId的列表。

使用如下filter+terms查询:

GET demo/_search?routing=11147489

{

"size":1000,

"query": {

"bool": {

"filter": {

"term": {

"aId": "11147489"

}

},

"must": [

{

"terms": {

"cId": [

"11147494",

"11147498",

....(1000个)

]

}

}

]

}

}

}

对于es中aId下cId数量小于100的情况性能比较理想大概在7ms左右,

但是对于aId下cId数量几千几万的情况下,响应时间达到40ms以上,但如果size设置为100,则有时候能降到10多ms。

以上插入和查询的时候使用了路由,返回结果_source也置为过false,使用过ids查询,用should里面套用1000个term替换terms,但效果都不理想。

请问下论坛里面的大神:

1. 为什么size=100和size=1000响应时间差距这么大,理论上查询条件带有aId和路由相同,只在一个分片上查询,协调节点只需要从一个分片上直接获取数据并返回即可,并没有分片之间结果合并,是因为fetch的过程比较耗时吗?我用profile去查看的时候几个耗时都不超过1ms。

2. 有没有其他方法优化aId下cId较大的情况,上述查询的响应时间。

谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值