我有很多包含rate
属性的文档,它是一个包含可接受比率的最小/最大范围的数组。Elasticsearch:如何根据最大/最小值的数组得分范围查询
{ "rate": [250, 700] }
我现在想执行提供了另一种范围查询,例如:
{
"bool": {
"must": [
"range": {
"rate": { "from": 100, "to": 500 }
}
]
}
}
这工作正常,并始终返回在范围内设置的值的至少一个值是什么我想要。
但是,对于所有结果,分数是相同的。无论文档中的值是否与文档上的值相同,或者只是碰到了几个数字的范围都没关系。如下图所示:
{
"_id": "one",
"_score": 1",
"_source": { "rate": [250,750] }
},
{
"_id": "two",
"_score": 1",
"_source": { "rate": [200,350] }
},
{
"_id": "three",
"_score": 1",
"_source": { "rate": [500,750] }
}
有什么办法可以改善范围搜索提供另一个范围吗?
谢谢,@pickypg,我实际上已经忘记了当我问这个问题(现在修复)时添加了范围查询。不幸的是,当我使用AWS ES服务时,我无法访问groovy。你会想到其他任何可以使它工作的想法吗?如果有帮助,我可以对数据进行不同的建模,但是我发现像'rate_from'和'rate_to'这样的单独值更加复杂。这个想法是,它与范围内的某个区域匹配得越多,或者评分越高(即提供100,500个输入时,100,500个输入将是100%匹配,而400,700则不是那么多。 – zanona