构造DSL查询框架时获取其他文档值



我在DSL查询中添加了一个script_score,以根据源产品的价格提高结果。像这样的东西:

functions":[
{
"script_score":{
"script":"if (doc['price'].size() > 0 && doc['price'].value == 1000.0) {15}"
}
}
],

这里";1000.0〃;是不属于响应的一个文档的价格。为了实现这一点,我必须查询两次,首先是获得该文档的价格,然后对查询进行框化,并将价格添加到查询中,以提高结果,这会导致性能下降。

应该有一些方法可以做到这一点,使用无痛脚本来获得id的值,但我无法获得。如果有人能在这方面提供帮助,那就太好了。TIA!

实际上,有一种方法。我试着在下面复制你的案例,我希望它足够接近你的情况。

比如说,你有一个带价格的索引,即从你第一次获取价格应该提高的文档的地方。

PUT prices/_doc/1
{
"price": 1000
}

然后,您的主索引是包含运行第二个查询的文档的索引,比如说它是针对产品的,我们有一个产品的价格为1000,另一个产品价格为500。

PUT products/_doc/q
{
"name": "product q",
"price": 1000
}
PUT products/_doc/2
{
"name": "product 2",
"price": 500
}

现在,查询看起来是这样的。在function_score查询中,对于价格与价格指数中ID为1的文档的价格匹配的文档,我们将增加15(即脚本中的硬编码值(。terms lookup查询将从指定文档(即ID为1的文档(中获取1000的price,然后将以15的权重提升具有该价格的文档。

GET products/_search
{
"query": {
"function_score": {
"functions": [
{
"weight": 15,
"filter": {
"terms": {
"price": {
"index": "prices",
"id": "1",
"path": "price"
}
}
}
}
]
}
}
}

我希望这能解决你的问题。

相关内容

  • 没有找到相关文章

最新更新