Elasticsearch aggrecation给出了一个结果的2个结果

时间:2017-10-11 13:23:55

标签: python-3.x elasticsearch

我想在品牌领域汇总,并给我两个结果,而不是一个

brands_aggs从这个文本中找到了我

{name:“Brand 1”}

2结果

Private Sub PolBX_AfterUpdate() End Sub Brand

但为什么我只需要1

与品牌一词分开,1与(品牌1)

分开

并且在聚合中给我2个结果

我希望聚合的映射

Brand 1

我的帖子请求

 mapping = {  
        "mappings": {

            "product": {
                "properties": {

                    "categories": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        },
                        "fielddata": True
                    }

                    "brand": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        },
                        "fielddata": True
                    }

                }
            }
        }
    }
来自服务器的

响应

{
    "query" : {
        "bool": {
            "must": [
                {"match": { "categories": "AV8KW5Wi31qHZdVeXG4G" }}
            ]
        }
    },
    "size" : 0,
    "aggs" : {
        "brand_aggs" : {
            "terms" : { "field" : "brand" }
        },
        "categories_aggs" : {
            "terms" : { "field" : "categories" }
        }
    }

}

2 个答案:

答案 0 :(得分:1)

您的映射具有属性字段,当您希望为同一字段使用多个分析器时,将使用这些属性字段。在您的情况下,您的字段的有效名称是“brand.keyword”。当您为“品牌”调用聚合时,它使用为字符串定义的默认映射。

所以你的查询应该是:

{
    "query" : {
        "bool": {
            "must": [
                {"match": { "categories": "AV8KW5Wi31qHZdVeXG4G" }}
            ]
        }
    },
    "size" : 0,
    "aggs" : {
        "brand_aggs" : {
            "terms" : { "field" : "brand.keyword" }
        },
        "categories_aggs" : {
            "terms" : { "field" : "categories.keyword" }
        }
    }

}

当您想要搜索多个分析器的相同属性时,属性字段非常有用,例如:

         "full_name": {
            "type": "text",
            "analyzer": "standard",
            "boost": 1,
            "fields": {
              "autocomplete": {
                "type": "text",
                "analyzer": "ngram_analyzer"
              },
              "standard":{
                "type": "text",
                "analyzer": "standard"
              }
            }
          },

答案 1 :(得分:0)

您需要将字符串映射为not_analyzed字符串,为此运行以下查询

PUT your_index/_mapping/your_type
{
  "your_type": {
    "properties": {
      "brand": {
        "type": "string",
        "index": "analyzed",
        "fields": {
          "raw": {
            "type": "string",
            "index": "not_analyzed"
          }
        }
      }
    }
  }
}

请勿忘记将your_typeyour_index替换为您的类型和索引值。