Search 弹性搜索。带破折号字符串的范围查询
我将elasticsearch用于具有日期值字符串字段的数据,如下所示:Search 弹性搜索。带破折号字符串的范围查询,search,elasticsearch,range,Search,elasticsearch,Range,我将elasticsearch用于具有日期值字符串字段的数据,如下所示: curl -XPOST localhost:9200/documents -d '{ "mappings": { "order": { "properties": { "createdDate": { "type": "date" } } } } }' “2016-
curl -XPOST localhost:9200/documents -d '{
"mappings": {
"order": {
"properties": {
"createdDate": {
"type": "date"
}
}
}
}
}'
“2016-01-2518:40:18.933”
我正在尝试使用范围过滤器来获取从日期到日期的值。例如:
"query" : {
"filtered" : {
"query" : {
"range" : {
"createdDate" : {
"gte": "2015-11-01",
"lte": "2016-01-25"
}
}
}
}
}
}
“查询”:{
“过滤”:{
“查询”:{
“范围”:{
“createdDate”:{
“gte”:“2015-11-01”,
“lte”:“2016-01-25”
}
}
}
}
}
}
但结果不包含带有“createdDate”的值:“2015-12-14 20:28:23.557”
如果我使用“gte”:“2015”
或“gte”:“2014-12-31”
,则结果中将包含带有“createdDate”:“2015-12-14”
的值
我的查询出了什么问题?如果您希望能够在日期上运行
范围
查询,则需要将字段映射为,否则它将无法按预期工作。在您共享的映射中,createdDate
是一个字符串
。您需要擦除索引,并为createdDate
字段创建一个具有正确映射的新索引,如下所示:
curl -XPOST localhost:9200/documents -d '{
"mappings": {
"order": {
"properties": {
"createdDate": {
"type": "date"
}
}
}
}
}'
然后,您可以重新索引数据,您的
范围
查询将按预期工作。您可以共享createdDate
字段的映射吗curl-XGET localhost:9200/index/_-mapping
{“文档”:{“映射”:{“顺序”:{“属性”:{…“创建数据”:{“类型”:“字符串”}
谢谢您的回复!我在将字段转换为日期时遇到问题,因为弹性服务由外部团队支持,而不仅仅是我使用它。所以,这可能并不简单。我认为弹性可以将字符串字段范围()它在其他字段中也可以工作,那么为什么在这个字段中会出现问题呢?范围
查询适用于字符串字段,但它所要做的只是执行一个“字典”范围(即字母顺序),也就是说,它不会解释日期。如果您希望能够使用此字段筛选日期范围,它必须是一个date
字段。从词典范围的角度来看,字符串“2015-12-14”不大于字符串“2015-11-01”?我想它会逐字符比较字符串,“2015-1”等于,但“2”大于“1”这里的问题是您的字符串也会被分析,因此字符串2015-12-14 20:28:23.557
将被标记为以下六个标记,即2015
、12
、14
、20
、28
和23.557
。因此,范围
不会在整个字符串值上运行,而是在这些字符串值上运行好的,再次感谢!我将尝试将字段转换为日期类型。