ElasticSearch:如何按分析字段的术语聚合整个字符串句子?

时间:2016-03-08 06:23:00

标签: elasticsearch

我有一个经过分析的领域,例如,让它命名为#34;座右铭"。我想全文saerch"生活"并按计数汇总它们。

...
"query":{
    "term":{
        "motto":"life"
    }
},
"aggs": {
    "match_count": {
        "terms": "motto"
    }
}
...

我想要的结果是:

...
{
    ...
    "buckets": [
        {
            "key":"life is good",
            "doc_count":3
        }
    ]
    ...
}
...

结果实际上是:

{
    ...
    "buckets": [
        {
            "key": "life",
            "doc_count": 3
        },
        {
            "key": "good",
            "doc_count": 3
        },
        {
            "key": "is",
            "doc_count": 3
        }
    ]
    ...
}

如何按照我想要的方式聚合它们?

1 个答案:

答案 0 :(得分:4)

您可以做的是为not_analyzed字段创建motto子字段,如下所示:

curl -XPUT localhost:9200/your_index/your_type/_mapping -d '{
    "your_type": {
        "properties": {
            "motto": {
                "type": "string",
                "fields": {
                    "raw": {
                        "type": "string",
                        "index": "not_analyzed"
                    }
                }
            }
        }
    }
}'

完成后,您需要重新编制数据索引,以便填充motto.raw子字段。

最后,您将能够运行这样的查询,即在motto上搜索,但在motto.raw上汇总:

...
"query":{
    "term":{
        "motto":"life"
    }
},
"aggs": {
    "match_count": {
        "terms": { "field": "motto.raw" }
    }
}
...