弹性搜索 - 显示数组的所有不同值

时间:2014-04-13 08:57:53

标签: elasticsearch facet

对于映射为字符串的字段,我在ES索引中存储了字符串列表,例如:

  subject: ["Scientific Research", "Numerical Analysis", "History of Art"]

我想查询此字段并检索具有频率计数的类别的全名。到目前为止我尝试过的方面:

  "query":{
       "match_all": {}
   }, 
   "facets":{
       "tag":{
           "terms":{
               "field":"subject"}
             }
   }  

没有按预期工作,因为它将我的主题字段拆分为令牌并返回最常见的停用词。如何根据分析字段的计数获得完整的条目,如果可能的话,不仅仅是前10名?谢谢!

1 个答案:

答案 0 :(得分:1)

我会使用multi-field定义您的映射,如此 -

{
   .....
        ....
            .....
            "subject": {
                "type": "multi_field",
                "store": "yes",
                "fields": {
                    "analyzed": {
                        "type": "string",
                        "analyzer": "standard"
                    },
                    "notanalyzed": {
                        "type": "string",
                        "index": "not_analyzed"
                    }
                }
            }

然后我会像{ - 1}那样在notanalyzed字段上进行分区 -

"query":{
      "match_all": {}
  }, 
  "facets":{
      "tag":{
          "terms":{
              "field":"subject.notanalyzed",
              "size": 50
            }
        }
  }