簡體   English   中英

嵌套字段類型只會在彈性搜索中搜索為一個文檔計數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM