我有一个包含2011-10-20
等值的字段,其中包含映射:
"joiningDate": { "type": "date", "format": "dateOptionalTime" }
以下查询最终以 SearchPhaseExecutionException 结束。
"wildcard" : { "ingestionDate" : "2011*" }
似乎 ES(v1.1)并没有提供那么多的狂喜。 This post表明了脚本的想法(未接受的答案甚至更多)。我会试试,只是问是否有人已经这样做了?
期望
搜索字符串13
应匹配joiningDate
字段具有值的所有文档:
2011-10-13
2013-01-11
2100-13-02
答案 0 :(得分:3)
我不确定我是否正确了解您的需求,但我建议您使用“范围查询”作为日期字段。 下面的代码将返回您想要获得的结果。
{
"query": {
"range": {
"joiningDate": {
"gt": "2011-01-01",
"lt": "2012-01-01"
}
}
}
}'
我希望这可以帮到你。
我建议您使用Elasticsearch的“多字段”功能。 这意味着您可以同时为两个不同的字段类型索引“joinedDate”字段。 请查看并尝试以下示例代码。
创建索引
curl -XPUT 'localhost:9200/blacksmith'
定义“joinedDate”字段类型为“multi_field”的映射。
curl -XPUT 'localhost:9200/blacksmith/my_type/_mapping' -d '{
"my_type" : {
"properties" : {
"joiningDate" : {
"type": "multi_field",
"fields" : {
"joiningDate" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"verbatim" : {
"type" : "string",
"index" : "not_analyzed"
}
}
}
}
}
}'
索引4份文件(3份文件包含“13”)
curl -s -XPOST 'localhost:9200/blacksmith/my_type/1' -d '{ "joiningDate": "2011-10-13" }'
curl -s -XPOST 'localhost:9200/blacksmith/my_type/2' -d '{ "joiningDate": "2013-01-11" }'
curl -s -XPOST 'localhost:9200/blacksmith/my_type/3' -d '{ "joiningDate": "2130-12-02" }'
curl -s -XPOST 'localhost:9200/blacksmith/my_type/4' -d '{ "joiningDate": "2014-12-02" }' # no 13
尝试使用通配符查询“joinedDate.verbatim”字段而不是“joinedDate”字段。
curl -XGET 'localhost:9200/blacksmith/my_type/_search?pretty' -d '{
"query": {
"wildcard": {
"joiningDate.verbatim": {
"wildcard": "*13*"
}
}
}
}'