我正在尝试使用以下范围查询来查询Elasticsearch集群(2.3)中的数据。为了澄清,我正在搜索包含一组值的字段,这些值是通过将两个ID与一个计数连接而得到的。例如:
架构:
{
id1: 111,
id2: 222,
count: 5
}
我正在使用的查询如下所示:
查询:
{
"query": {
"bool": {
"must": {
"range": {
"myfield": {
"from": "111_222_1",
"to": "111_222_2147483647",
"include_lower": true,
"include_upper": true
}
}
}
}
}
}
to
字段使用Integer.MAX_VALUE
这项工作正常,但与基础数据不完全匹配。通过其他方式查询产生的结果比这种方法更多。
更奇怪的是,在111_222_5
字段中尝试from
会产生0个结果,而尝试111_222_10
会产生结果。
ES(和/或Lucene)如何解释此范围查询以及为什么会产生如此奇怪的结果?我最初的猜测是,它没有查看字符串最后一部分的完整值,可能只查看第一个数字。
有没有办法为TermRange指定格式?我知道日期范围允许格式化。
答案 0 :(得分:0)
A look here provides the answer.
它的做法范围是词典,5在50之前到达,等等。
为了解决这个问题,我使用固定长度的字符串重新编制索引。
0000000001
0000000100
0001000101
...