[英]Nested field type will only search as one doc count in elastic search
我正在嘗試使用AggregationBuilders
按其客戶端名稱聚合我的文檔計數,因為我們有多個客戶端與單個文檔相關聯。 我們使用嵌套字段client_name
來索引和搜索文檔。
這是我的數據格式
{
"id": "5f68c6c80f52a45a0db6d470",
"name": "Mi Note 10 Lite",
"brand": {
"name": "xiaomi"
},
"client_name": [
{
"name": "client a"
},
{
"name": "client b"
}
]
}
當我嘗試使用聚合過濾器搜索客戶端 a 和 b 時,它只會返回一個文檔計數
"aggregations": {
"client a": {
"doc_count": 1
},
"client b": {
"doc_count": 0
},
}
我正在使用帶有彈性搜索 6.3 的 java API。
這是我的查詢代碼
boolQuery.should(new NestedQueryBuilder(CLIENT_NAME,
QueryBuilders
.termQuery(CLIENT_NAME + "." + NAME, token),ScoreMode.None));
這是我的AggregationBuilders.filter(k,v);
聚合桶不應該在兩個桶上返回 doc count 1 還是我錯過了什么?
添加包含索引數據、映射、搜索結果和搜索查詢的工作示例
索引映射:
{
"mappings": {
"properties": {
"client_name": {
"type": "nested",
"properties": {
"name": {
"type": "keyword"
}
}
}
}
}
}
指數數據:
{
"id": "5f68c6c80f52a45a0db6d470",
"name": "Mi Note 10 Lite",
"brand": {
"name": "xiaomi"
},
"client_name": [
{
"name": "client a"
},
{
"name": "client b"
}
]
}
搜索查詢:
{
"size" : 0,
"aggs": {
"client": {
"nested": {
"path": "client_name"
},
"aggs": {
"client_count": {
"terms": {
"field": "client_name.name"
}
}
}
}
}
}
搜索結果:
"aggregations": {
"client": {
"doc_count": 2,
"client_count": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "client a",
"doc_count": 1
},
{
"key": "client b",
"doc_count": 1
}
]
}
}
您可以參考這個SO answer ,將上面的 elasticsearch 查詢轉換為 JAVA 代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.