如果 elasticsearch 中的值不为空,如何计算字段
How to count a field if value is not null in elasticsearch
我已经在 ElasticSearch 中索引了一些文档。
短视图如下所示:
{
"tenant_id":"abcd1234"
"provider_id":"3456"
.
.
.
"doctor_summary": ["line1", "line2", "line3"] OR it could be null.
}
如果不为空,我想将此列表计算为 1,
query_template = {
"bool":{
"must":[
{"term":{"tenant_id.keyword":tenant_id}},
{"term":{"provider_id.keyword":provider_id}},
{"range":{"visit_date":{"gte":from_date,"lte":to_date}}},
],
"filter":[]
}
}
aggs_query = {
"doctor_summary_count":{
"value_count":{"field":"doctor_summary.keyword"}
}
}
res = CLIENT.search(index = config['elasticsearch']['abcd'],
query = query_template,
size = 10000,
aggs = aggs_query)
调用此聚合查询后,它给出的结果为(列表大小 * 总计 doctor_summary 字段)。
例如:上述文档的上述查询结果应该是1。(因为它不是空的)。
但它给出了 3(因为列表包含 3 行。)
您可以使用 exist query in aggregation with filter aggregation.
查询:
{
"aggs": {
"count": {
"filter": {
"exists": {
"field": "doctor_summary.keyword"
}
}
}
}
}
响应:
"aggregations" : {
"count" : {
"doc_count" : 1
}
}
我已经在 ElasticSearch 中索引了一些文档。 短视图如下所示:
{
"tenant_id":"abcd1234"
"provider_id":"3456"
.
.
.
"doctor_summary": ["line1", "line2", "line3"] OR it could be null.
}
如果不为空,我想将此列表计算为 1,
query_template = {
"bool":{
"must":[
{"term":{"tenant_id.keyword":tenant_id}},
{"term":{"provider_id.keyword":provider_id}},
{"range":{"visit_date":{"gte":from_date,"lte":to_date}}},
],
"filter":[]
}
}
aggs_query = {
"doctor_summary_count":{
"value_count":{"field":"doctor_summary.keyword"}
}
}
res = CLIENT.search(index = config['elasticsearch']['abcd'],
query = query_template,
size = 10000,
aggs = aggs_query)
调用此聚合查询后,它给出的结果为(列表大小 * 总计 doctor_summary 字段)。
例如:上述文档的上述查询结果应该是1。(因为它不是空的)。 但它给出了 3(因为列表包含 3 行。)
您可以使用 exist query in aggregation with filter aggregation.
查询:
{
"aggs": {
"count": {
"filter": {
"exists": {
"field": "doctor_summary.keyword"
}
}
}
}
}
响应:
"aggregations" : {
"count" : {
"doc_count" : 1
}
}