【发布时间】:2016-06-06 16:27:24
【问题描述】:
我正在尝试使用以下范围查询来查询 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
这可以正常工作,但与基础数据不完全匹配。通过其他方式查询比这种方式产生的结果更多。
更奇怪的是,在 from 字段中尝试 111_222_5 会产生 0 个结果,而尝试 111_222_10 确实会产生结果。
ES(和/或 Lucene)如何解释这个范围查询,为什么会产生如此奇怪的结果?我最初的猜测是它没有查看字符串最后一部分的完整值,可能只查看第一个数字。
有没有办法为 TermRange 指定格式?我了解日期范围允许格式化。
【问题讨论】:
-
对
to值使用111_222_null开始越来越接近准确的结果,但是在增加from时仍然会给出奇怪的结果。从理论上讲,结果应该越来越少,但是当达到 10 时会有一个尖峰。这进一步让我认为它只使用了第一个数字。看起来当我使用10时,它开始寻找计数 10 的文档。
标签: elasticsearch lucene range