问题描述
我在foo
索引中得到了这样的实体:
{ids: ["aa","bb"]}
{ids: ["aa","cc"]}
{ids: ["ee"]}
{ids: ["ff","cc"]}
基本上我想知道是否有ID为aa
和ee
的文档。
我试图通过术语聚合来做到这一点
{
"size": 0,"query": {
"bool": {
"should": [
{
"terms": {
"ids": [
"aa","ee"
],"boost": 1
}
}
],"adjust_pure_negative": true,"boost": 1
}
},"aggregations": {
"byid": {
"terms": {
"field": "ids","min_doc_count": 1
}
}
}
}
但是这里的问题是,作为响应,我还与所选实体具有的其他ids
进行了聚合,并且在实际情况下有很多实体,因此我感兴趣的ids
的聚合无法回应,我会认为没有适合他们的项目(但实际上有,但由于字数限制,没有回应)
我可以分别为每个id
进行此操作而无需aggs仅仅获得一个count
,但是它们很多,而且非常昂贵。
解决方法
基于聊天,发现不需要包含ID的文档,因此不需要汇总,现在主要的问题是搜索结果中是否存在特定ID。
有两种方法:
- 使用multi_search with a single id in each sub-request
- 使用具有所有ID的单个搜索请求,但使用脚本或source_filtering进行后处理并在响应中搜索ID。