欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2024/10/6 编程问答 46 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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较大的情况,上述查询的响应时间。

谢谢。

总结

以上是生活随笔为你收集整理的es查询大文本效率_es中terms查询速度能否优化的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。