我曾尝试在elasticsearch 6.1.2中搜索以下案例
我已经创建了一个类型为text的变量"rangeField“,并插入了以下记录。
rangeField : "1"
rangeField : "2"
rangeField : "3"
.
.
.
rangeField : "12"
我尝试了下面的测试用例
案例1:使用从1到5的范围查询进行搜索,返回的记录为rangeField 1,11,12,2,3,4,5。
案例2:使用从1到11的范围查询进行搜索,返回的记录为rangeField 1,11。
案例3:使用从1到23的范围查询进行搜索,返回的记录为rangeField 1,11,12,2。
案例4:使用从1到30的范围查询进行搜索,返回的记录为rangeField 1,11,12,2,3。
我需要找到正确的范围,
我一直使用"rangeField“作为文本,因为为了支持术语查询,
弹性搜索6.1.2
任何帮助都是非常感谢的。
发布于 2018-03-13 20:54:21
如果将字段rangeField
的数据类型从text
更改为integer
,则可以执行所需的两个查询。将索引1作为文本将具有与您实验过的相同的range([a-z])
行为。但是,如果您要更改您的映射,在integer
中修改dateField
数据类型,您将达到提高term query
以获得精确值的目的:
{
"query" :
{ "term" : { "rangeField" : 1 } }
}
或者是一个range query
{
"query": {
"range" : {
"rangeField" : {
"gte" : 10,
"lte" : 20
}
}
}
}
https://stackoverflow.com/questions/49255394
复制相似问题