我很好奇在给定的 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
}
这可以通过单个查询实现吗?或多个?就其值(value)而言,我正在使用 python elasticsearch和 elasticsearch-dsl客户。
我已成功向 /goober
发出 GET
请求并检索映射,并且正在学习如何提交每个字段的聚合请求,但我有兴趣了解特定字段在所有文档中出现的次数。
使用 Solr 后,我仍然了解 ES。预先感谢您的任何建议。
最佳答案
下面将返回带有“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"
}
}
}
}
}
第二个示例中每个聚合内的行为将模仿第一个查询的行为。在许多情况下,您可以进行常规搜索查询并将这些查找嵌套在聚合存储桶中。
关于python - 计算 ElasticSearch 索引中某个字段的实例数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46527110/