我很好奇在给定的ElasticSearch索引中计算特定字段实例的所有文档的最佳方法。
例如,如果我在索引goober
中有以下文档:
{
'_id':'foo',
'field1':'a value',
'field2':'a value'
},
{
'_id':'bar',
'field1':'a value',
'field2':'a value'
},
{
'_id':'baz',
'field1':'a value',
'field3':'a value'
}
我想知道以下内容:
{
'index':'goober',
'field_counts':
'field1':3,
'field2':2,
'field3':1
}
单个查询是否可行?还是多个?对于它的价值,我使用的是python elasticsearch和elasticsearch-dsl个客户。
我已成功向GET
发出/goober
请求并检索了映射,并且我正在学习如何为每个字段提交聚合请求,但我有兴趣了解一次特定字段出现在所有文档中。
来自使用Solr,仍然与ES有关。提前感谢任何建议。
答案 0 :(得分:1)
以下内容将返回“field2”的文档数:
POST /INDEX/_search
{
"size": 0,
"query": {
"bool": {
"filter": {
"exists": {
"field": "field2"
}
}
}
}
}
这是一个使用多个聚合的示例(将使用计数返回存储桶中的每个聚合),使用字段存在计数:
POST /INDEX/_search
{
"size": 0,
"aggs": {
"field_has1": {
"filter": {
"exists": {
"field": "field1"
}
}
},
"field_has2": {
"filter": {
"exists": {
"field": "field2"
}
}
}
}
}
第二个示例中每个agg内的行为将模仿第一个查询的行为。在许多情况下,您可以进行常规搜索查询并将这些查找嵌套在聚合桶中。