Java 范围查询不适用于elasticsearch 6.1.2中的文本数字
我曾尝试在elasticsearch 6.1.2中搜索以下案例 我创建了一个带有文本类型的变量“rangeField”,并插入了以下记录Java 范围查询不适用于elasticsearch 6.1.2中的文本数字,java,
elasticsearch,text,range,textfield,Java,
elasticsearch,Text,Range,Textfield,我曾尝试在elasticsearch 6.1.2中搜索以下案例 我创建了一个带有文本类型的变量“rangeField”,并插入了以下记录 rangeField : "1" rangeField : "2" rangeField : "3" . . . rangeField : "12" 我尝试了以下测试用例 案例1: 使用范围查询从1到5进行搜索,返回的记录范围为1,11,12,2,3,4,5 案例2: 使用范围查询从1到11进行搜索,返回的记录范围为1,11 案例3:
rangeField : "1"
rangeField : "2"
rangeField : "3"
.
.
.
rangeField : "12"
我尝试了以下测试用例
案例1:
使用范围查询从1到5进行搜索,返回的记录范围为1,11,12,2,3,4,5
案例2:
使用范围查询从1到11进行搜索,返回的记录范围为1,11
案例3:
使用范围查询从1到23进行搜索,返回的记录范围为1,11,12,2
案例4:
使用范围查询从1到30进行搜索,返回记录范围字段1,11,12,2,3
我需要找到正确的范围
我一直使用“rangeField”作为文本,因为为了支持术语查询
弹性搜索6.1.2
非常感谢您的帮助。如果您将字段的数据类型
rangeField
从text
更改为integer
,则您可以执行所需的两个查询。将1索引为文本将具有与您试验的范围([a-z])
相同的行为。但是,如果您要更改映射,修改整数
中的日期字段
数据类型,您将改进术语查询
,以获得精确值:
{
"query" :
{ "term" : { "rangeField" : 1 } }
}
或范围查询:
{
"query": {
"range" : {
"rangeField" : {
"gte" : 10,
"lte" : 20
}
}
}
}
对我想使用terms query在单个字段@Lupanoide中搜索多个值看看这里我可以匹配字段,但我想通过使用范围查询进入范围但我的要求是将数字字段保存为文本字段我尝试的是terms query而不是Term query为什么需要将整数保存为文本?对于仅为文本的terms query不同的语法要在列表中进行更多的术语查询,请看这里