Elasticsearch术语统计信息查询未正确分组

时间:2014-01-22 20:58:09

标签: search indexing elasticsearch

我的术语统计信息查询与此非常类似:

Sum Query in Elasticsearch

但是,我的key_field是约会。

我原本希望收到按完整key_field值[“2014-01-20”,“2014-01-21”,“2014-01-22”]分组的结果,但它似乎在分割关键字段时它遇到了“ - ”。我收到的内容实际上按[“2014”,“01”,“20”,“21”,“22”]分组。

为什么分裂我的钥匙?

1 个答案:

答案 0 :(得分:1)

您可能使用key_field - 分析器将string映射为standard类型。

这会将2014-01-20标记为20140120

您可能希望将日期编入索引类型date。您也可以将其作为字符串而不进行分析。

以下是您可以使用的可运行示例:https://www.found.no/play/gist/5eb6b8d176e1cc72c9b8

#!/bin/bash

export ELASTICSEARCH_ENDPOINT="http://localhost:9200"

# Create indexes

curl -XPUT "$ELASTICSEARCH_ENDPOINT/play" -d '{
    "settings": {},
    "mappings": {
        "type": {
            "properties": {
                "date_as_a_string": {
                    "type": "string"
                },
                "date_as_nonanalyzed_string": {
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }
    }
}'


# Index documents
curl -XPOST "$ELASTICSEARCH_ENDPOINT/_bulk?refresh=true" -d '
{"index":{"_index":"play","_type":"type"}}
{"date":"2014-01-01T00:00:00.000Z","date_as_a_string":"2014-01-01T00:00:00.000Z","date_as_nonanalyzed_string":"2014-01-01T00:00:00.000Z","x":42}
'

# Do searches

curl -XPOST "$ELASTICSEARCH_ENDPOINT/_search?pretty" -d '
{
    "facets": {
        "date": {
            "terms_stats": {
                "key_field": "date",
                "value_field": "x"
            }
        },
        "date_as_a_string": {
            "terms_stats": {
                "key_field": "date_as_a_string",
                "value_field": "x"
            }
        },
        "date_as_nonanalyzed_string": {
            "terms_stats": {
                "key_field": "date_as_nonanalyzed_string",
                "value_field": "x"
            }
        }
    },
    "size": 0
}
'