我有多个Elasticsearch索引,我想获得doc_count
的数量以符合每个索引的查询的条件(即使没有文档匹配该索引)。我尝试了这一点(使用elasticsearch.js):
{
index: 'one,or,many,indices,here',
query: {
query_string: {
query: 'hello',
},
},
aggs: {
group_by_index: {
terms: {
field: '_index',
min_doc_count: 0,
},
},
},
from: 0,
size: 20,
};
仅当我在index
键上指定所有索引时,此方法才有效。但是,我并不总是希望在搜索结果中匹配所有索引中的文档。
所以我想到了:
{
index: 'all,indices,here',
query: {
bool: {
must: [
{
query_string: {
query: 'hello',
},
},
{
terms: {
_index: 'only,search,hits,indices,here',
},
},
],
},
},
aggs: {
group_by_index: {
terms: {
field: '_index',
min_doc_count: 0,
},
},
},
from: 0,
size: 20,
};
但是随后我得到doc_count: 0
的匹配索引,因为该索引不在布尔查询中。
如何获取所有索引的doc_count
,但不能从不需要的索引中获得搜索匹配?
答案 0 :(得分:1)
您需要将索引约束移至post_filter
{
index: 'all,indices,here',
query: {
bool: {
must: [
{
query_string: {
query: 'hello',
},
},
],
},
},
aggs: {
group_by_index: {
terms: {
field: '_index',
min_doc_count: 0,
},
},
},
post_filter: {
terms: {
_index: 'only,search,hits,indices,here',
},
},
from: 0,
size: 20,
};