es查询大文本效率_es中terms查询速度能否优化
es表結(jié)構(gòu)如下:PUT demo/
{
"mappings": {
"demo": {
"_all": {
"enabled": false
},
"properties": {
"aId": {
"type": "keyword"
},
"cId": {
"type": "keyword"
}
}
}
}
}
插入:按照如上單獨(dú)aId和cId存儲(chǔ)為一個(gè)doc
查詢(xún):每次傳入一個(gè)aId和1000個(gè)cId的列表,返回es中匹配的aId+cId的列表。
使用如下filter+terms查詢(xún):
GET demo/_search?routing=11147489
{
"size":1000,
"query": {
"bool": {
"filter": {
"term": {
"aId": "11147489"
}
},
"must": [
{
"terms": {
"cId": [
"11147494",
"11147498",
....(1000個(gè))
]
}
}
]
}
}
}
對(duì)于es中aId下cId數(shù)量小于100的情況性能比較理想大概在7ms左右,
但是對(duì)于aId下cId數(shù)量幾千幾萬(wàn)的情況下,響應(yīng)時(shí)間達(dá)到40ms以上,但如果size設(shè)置為100,則有時(shí)候能降到10多ms。
以上插入和查詢(xún)的時(shí)候使用了路由,返回結(jié)果_source也置為過(guò)false,使用過(guò)ids查詢(xún),用should里面套用1000個(gè)term替換terms,但效果都不理想。
請(qǐng)問(wèn)下論壇里面的大神:
1. 為什么size=100和size=1000響應(yīng)時(shí)間差距這么大,理論上查詢(xún)條件帶有aId和路由相同,只在一個(gè)分片上查詢(xún),協(xié)調(diào)節(jié)點(diǎn)只需要從一個(gè)分片上直接獲取數(shù)據(jù)并返回即可,并沒(méi)有分片之間結(jié)果合并,是因?yàn)閒etch的過(guò)程比較耗時(shí)嗎?我用profile去查看的時(shí)候幾個(gè)耗時(shí)都不超過(guò)1ms。
2. 有沒(méi)有其他方法優(yōu)化aId下cId較大的情況,上述查詢(xún)的響應(yīng)時(shí)間。
謝謝。
總結(jié)
以上是生活随笔為你收集整理的es查询大文本效率_es中terms查询速度能否优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python怎么将png转为tif_pn
- 下一篇: docusign文档打不开_怎样查看 d