如何在elasticsearch中通过substring进行聚合

时间:2014-04-17 08:41:29

标签: elasticsearch aggregation

我必须将许多文档编入索引:

POST /example/doc
{
 id : "type-name",
 foo: bar
}

我希望检索所有类型的列表。例如

 POST /example/doc
 {
     id : "AAA-123",
     foo: bar
 }
 POST /example/doc
 {
     id : "AAA-456",
     foo: bar
 }
 POST /example/doc
 {
     id : "BBB-123",
     foo: bar
 }

并要求elasticseaarch给我一个列表,其中我有AAA和BBB。

更新 我也使用自定义分析仪解决了

"settings": { 
        "analysis": {
            "char_filter" : {
                "remove_after_minus":{
                    "type":"pattern_replace",
                    "pattern":"-(.*)",
                    "replacement":""
                }
            },
            "analyzer": {
                "id_analyzer":{
                     "tokenizer" : "standard",
                    "char_filter" : ["remove_after_minus"]
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

如果你保留标准分析仪,id将被分成“ - ”。因此,如果您的类型大小写相同,则可以使用简单的构面查询

curl -XPOST  "http://localhost:9023/index/type/_search?size=0&pretty=true" -d
'{
    "query" : {
        { "regexp":{ "id": "[A-Z]+" }
    },
   "facets" : {
       "id" : {
           "terms" : {
               "field" : "id",
               "size" : 50
            }
        }
    }
}'

应该给你一些可以使用的东西。