弹性搜索唯一ID中的唯一计数



假设我的数据如下:

项目6000:的文件

{"项目ID":"6000","价格":50万,"卧室":2,"标题":"负担得起的奢侈品","面积":"A"},

{"项目ID":"6000","价格":70万,"卧室":4,"标题":"宽敞","面积":"A"}

项目6001:文件

{"项目ID":"6001","价格":550000,"卧室":2,"标题":"令人惊叹","面积":"A"}

{"项目ID":"6001","价格":650000,"卧室":3,"标题":"美景"。"面积":"B"}

项目6002:文件

{"项目ID":"6002","价格":550000,"卧室":2,"标题":"令人惊叹","面积":"B"}

{"项目ID":"6002","价格":650000,"卧室":3,"标题":"美景"。"面积":"C"}

等等

现在,我想检索区域的计数,以便获得项目存在但只考虑唯一项目ID的最受欢迎的区域。我有这个问题:

query = {
"aggs": {
"most_popular": {
"terms": {
"field": "area",
"size": 5,
"order": {
"_count": "desc"
},
}
}
}

结果是:

bucket:[{'key':"A",doc_count:3},{'key':"B",doc-count:2}…依此类推]但我想要的是每个项目的唯一计数,所以A的doc_count应该是2而不是3,即避免在同一项目中重复。

这在弹性搜索中是怎么可能的?

您需要使用作为父管道的bucket排序聚合对其父多存储桶的存储桶进行排序的聚合聚合

添加具有索引数据、搜索查询和搜索结果的工作示例

指数数据:

{"projectId": "6000", "price": 500000, "bedrooms": 2, "title": "Affordable luxury", "area": "A"},
{"projectId": "6000", "price": 700000, "bedrooms": 4, "title": "Spacious", "area": "A"}
{"projectId": "6001", "price": 550000, "bedrooms": 2, "title": "Stunning", "area": "A"}
{"projectId": "6001", "price": 650000, "bedrooms": 3, "title": "Excellent views". "area": "B"}
{"projectId": "6002", "price": 550000, "bedrooms": 2, "title": "Stunning", "area": "B"}
{"projectId": "6002", "price": 650000, "bedrooms": 3, "title": "Excellent views". "area": "C"}
{"projectId": "6002", "price": 500000, "bedrooms": 2, "title": "Affordable luxury", "area": "C"}
{"projectId": "6002", "price": 500000, "bedrooms": 2, "title": "Affordable luxury", "area": "C"}

搜索查询:

{
"size": 0,
"aggs": {
"most_popular": {
"terms": {
"field": "area",
"size": 5
},
"aggs": {
"unique": {
"cardinality": {
"field": "projectId"
}
},
"uniqueCount_bucket_sort": {
"bucket_sort": {
"sort": [
{
"unique": {
"order": "asc"
}
}
]
}
}
}
}
}
}

搜索结果:

"buckets": [
{
"key": "C",
"doc_count": 3,
"unique": {
"value": 1
}
},
{
"key": "B",
"doc_count": 2,
"unique": {
"value": 2
}
},
{
"key": "A",
"doc_count": 3,
"unique": {
"value": 2
}
}
]

您可以向查询中添加另一个aggregation,并获得projectId基数,如下所示:

{
"aggs": {
"most_popular": {
"terms": {
"field": "area",
"size": 5,
"order": {
"_count": "desc"
}
},"aggs": {
"unique": {
"cardinality": {
"field": "projectId"
}
}
}
}
}
}

最新更新