栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Elastic Search中嵌套字段的术语聚合

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Elastic Search中嵌套字段的术语聚合

如我所说。您的问题是您的文本被分析,elasticsearch总是在令牌级别聚合。因此,为了解决该问题,必须将字段值索引为单个标记。有两种选择:

  • 不分析它们
  • 使用关键字分析器+小写(不区分大小写的aggs)为它们编制索引

因此,将使用小写过滤器并删除重音符号(

ö => o
以及
ß =>ss
您的字段的其他字段,以创建自定义关键字分析器)来进行设置,以便将它们用于聚合(
raw
keyword
):

PUT /test{  "settings": {    "analysis": {      "analyzer": {        "my_analyzer_keyword": {          "type": "custom",          "tokenizer": "keyword",          "filter": [ "asciifolding", "lowercase"          ]        }      }    }  },  "mappings": {    "data": {      "properties": {        "products_filter": {          "type": "nested",          "properties": { "filter_name": {   "type": "string",   "analyzer": "standard",   "fields": {     "raw": {       "type": "string",       "index": "not_analyzed"     },     "keyword": {       "type": "string",       "analyzer": "my_analyzer_keyword"     }   } }, "filter_value": {   "type": "string",   "analyzer": "standard",   "fields": {     "raw": {       "type": "string",       "index": "not_analyzed"     },     "keyword": {       "type": "string",       "analyzer": "my_analyzer_keyword"     }   } }          }        }      }    }  }}

测试文件,您给了我们:

PUT /test/data/1{  "products_filter": [    {      "filter_name": "Rahmengröße",      "filter_value": "33,5 cm"    },    {      "filter_name": "color",      "filter_value": "gelb"    },    {      "filter_name": "Rahmengröße",      "filter_value": "39,5 cm"    },    {      "filter_name": "Rahmengröße",      "filter_value": "45,5 cm"    }  ]}

这将是查询以使用

raw
字段进行汇总:

GET /test/_search{  "size": 0,  "aggs": {    "Nesting": {      "nested": {        "path": "products_filter"      },      "aggs": {        "raw_names": {          "terms": { "field": "products_filter.filter_name.raw", "size": 0          },          "aggs": { "raw_values": {   "terms": {     "field": "products_filter.filter_value.raw",     "size": 0   } }          }        }      }    }  }}

它确实带来了预期的结果(带有过滤器名称的存储桶和带有其值的子存储桶):

{  "took": 1,  "timed_out": false,  "_shards": {    "total": 5,    "successful": 5,    "failed": 0  },  "hits": {    "total": 1,    "max_score": 0,    "hits": []  },  "aggregations": {    "Nesting": {      "doc_count": 4,      "raw_names": {        "doc_count_error_upper_bound": 0,        "sum_other_doc_count": 0,        "buckets": [          { "key": "Rahmengröße", "doc_count": 3, "raw_values": {   "doc_count_error_upper_bound": 0,   "sum_other_doc_count": 0,   "buckets": [     {       "key": "33,5 cm",       "doc_count": 1     },     {       "key": "39,5 cm",       "doc_count": 1     },     {       "key": "45,5 cm",       "doc_count": 1     }   ] }          },          { "key": "color", "doc_count": 1, "raw_values": {   "doc_count_error_upper_bound": 0,   "sum_other_doc_count": 0,   "buckets": [     {       "key": "gelb",       "doc_count": 1     }   ] }          }        ]      }    }  }}

另外,您可以将field与关键字分析器(以及一些规范化)结合使用,以获得更通用且不区分大小写的结果:

GET /test/_search{  "size": 0,  "aggs": {    "Nesting": {      "nested": {        "path": "products_filter"      },      "aggs": {        "keyword_names": {          "terms": { "field": "products_filter.filter_name.keyword", "size": 0          },          "aggs": { "keyword_values": {   "terms": {     "field": "products_filter.filter_value.keyword",     "size": 0   } }          }        }      }    }  }}

结果就是:

{  "took": 1,  "timed_out": false,  "_shards": {    "total": 5,    "successful": 5,    "failed": 0  },  "hits": {    "total": 1,    "max_score": 0,    "hits": []  },  "aggregations": {    "Nesting": {      "doc_count": 4,      "keyword_names": {        "doc_count_error_upper_bound": 0,        "sum_other_doc_count": 0,        "buckets": [          { "key": "rahmengrosse", "doc_count": 3, "keyword_values": {   "doc_count_error_upper_bound": 0,   "sum_other_doc_count": 0,   "buckets": [     {       "key": "33,5 cm",       "doc_count": 1     },     {       "key": "39,5 cm",       "doc_count": 1     },     {       "key": "45,5 cm",       "doc_count": 1     }   ] }          },          { "key": "color", "doc_count": 1, "keyword_values": {   "doc_count_error_upper_bound": 0,   "sum_other_doc_count": 0,   "buckets": [     {       "key": "gelb",       "doc_count": 1     }   ] }          }        ]      }    }  }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403688.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号