【问题标题】:elasticsearch facet nested aggregationelasticsearch方面嵌套聚合
【发布时间】:2019-08-15 22:05:36
【问题描述】:

使用elasticsearch 7.0.0。

我正在关注这个link。

我有一个索引test_products,下面是mapping:

{
"settings": {
    "number_of_shards": 1
},
"mappings": {
    "dynamic_templates": [
        {
            "search_result_data": {
                "mapping": {
                    "type": "keyword"
                },
                "path_match": "search_result_data.*"
            }
        }
        ],
    "properties": {
        "search_data": {
            "type": "nested",
            "properties": {
                "full_text": {
                    "type": "text"
                },
                "string_facet": {
                    "type": "nested",
                    "properties": {
                        "facet-name": {
                            "type": "keyword"
                        },
                        "facet-value": {
                            "type": "keyword"
                        }
                    }
                }
            }
        }
    }
}
}

并以以下格式插入文档:

    {
  "search_result_data": {
    "sku": "wheel-6075-90092",
    "gtin": null,
    "name": "Matte Black Wheel Fuel Ripper",
    "preview_image": "abc.jg",    
    "url": "9836817354546538796",
    "brand": "Fuel Off-Road"
  },
  "search_data": 
    {
      "full_text": "Matte Black Wheel Fuel Ripper",
      "string_facet": [
        {
          "facet-name": "category",
          "facet-value": "Motor Vehicle Rims & Wheels"
        },
        {
          "facet-name": "brand",
          "facet-value": "Fuel Off-Road"
        }
      ]
    }    
}

和另一份文件..

我正在尝试在链接中提到的string_facet 上进行聚合。

"aggregations": {


"agg_string_facet": {
    "nested": {
      "path": "string_facet"
    },
    "aggregations": {
      "facet_name": {
        "terms": {
          "field": "string_facet.facet-name"
        },
        "aggregations": {
          "facet_value": {
            "terms": {
              "field": "string_facet.facet-value"
            }
          }
        }
      }
    }
  }
}

但是我得到了所有(两个)文件返回:

"aggregations": {
    "agg_string_facet": {
      "doc_count": 0
   }
 }

我在这里错过了什么?

还有为什么文档会作为响应返回?

【问题讨论】:

  • 您期望的结果是什么?您想获取 facet-value 和 facet-name 字段的唯一值吗?

标签: elasticsearch elasticsearch-aggregation


【解决方案1】:

文档作为响应返回,因为它们与您的查询匹配。如果您希望它们消失,您可以将“大小”字段设置为 0。默认情况下,它设置为 10。

query{
...
}, 
"size" = 0

我阅读了文档和Facet aggregation has been removed。建议使用Terms aggregation。

现在,对于您的问题,您可以选择两种选择:

  1. 如果您想获取每个的唯一值:facet-value 和 facet-name,您可以执行以下操作:

"aggs":{
    "unique facet-values":{
        "terms":{
            "field": "facet-value.keyword",
            "size": 30 #By default is 10, maximum recommended is 10,000
        }
    },
    "unique facet-names":{
        "terms":{
            "field": "facet-name.keyword"
            "size": 30 #By default is 10, maximum recommended is 10,000
        }
    }
}
  1. 如果您想获得 facet-name 和 facet-value 之间的唯一组合,可以使用Composite aggregation。如果您选择这种方式,您的 aggs 应如下所示:

{
    "aggs":{
       "unique-facetvalue-and-facetname-combination":{
            "composite":{
                "size": 30, #By default is 10, maximum recommended is 10,000. No matter what size you choose, you can paginate.
                "sources":[
                    { 
                         "value":
                             { 
                                 "terms":{ 
                                     "field": "facet-value.keyword" 
                                  } 
                             } 
                    },
                    { 
                         "name":
                             { 
                                 "terms":{ 
                                     "field": "facet-name.keyword" 
                                  } 
                             } 
                    }
                ]
            }
        }
    }
}

使用 Composite 而不是 Terms 的优势在于 Composite 允许您使用 After key 对结果进行分页。因此您的集群的性能不会受到影响。

希望这有帮助! :D

【讨论】:

    猜你喜欢
    • 2021-12-14
    • 2015-11-18
    • 1970-01-01
    • 2018-01-30
    • 2015-07-30
    • 2015-03-25
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多