elasticsearch – 如何通过elasticseach中的substring进行聚合

我必须索引许多这样的文档:

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.

UPDATE
我也解决了使用自定义分析仪的问题

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

最佳答案 如果你保留标准分析仪,id将被分成“ – ”.因此,如果您的类型大小写相同,则可以使用简单的facet查询

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
            }
        }
    }
}'

应该给你你可以使用的somtehing.

点赞