我尝试在elasticsearch 6.1.2中搜索以下案例
我创建了一个带有文本类型的变量“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”作为文本,因为为了支持术语查询,
Elasticsearch 6.1.2
非常感谢任何帮助。
最佳答案
如果您将字段 rangeField
的数据类型从 text
更改为 integer
,您就能够执行您需要的两个查询。将 1 索引为文本将具有与您实验过的 range([a-z])
相同的行为。但是,如果您要更改映射,修改 integer
中的 dateField
数据类型,您将改进精确值的术语查询
:
{
"query" :
{ "term" : { "rangeField" : 1 } }
}
或范围查询
:
{
"query": {
"range" : {
"rangeField" : {
"gte" : 10,
"lte" : 20
}
}
}
}
关于java - 范围查询不适用于 Elasticsearch 6.1.2 中的文本数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49255394/