gpt4 book ai didi

elasticsearch 嵌套函数ScoreQuery 无法访问父属性

转载 作者:行者123 更新时间:2023-12-02 22:12:51 26 4
gpt4 key购买 nike

我在 elasticsearch 中有一个看起来像这样的类型:

    "hotel" : {    
"field" : 1,
"rooms" : [
{
"type" : "single",
"magicScore" : 1
},
{
"type" : "double",
"magicScore" : 2
}
]
}

其中房间是嵌套类型。我使用嵌套的 functionScoreQuery 进行排序:
{
"query" : {
"filtered" : {
"query" : {
"nested" : {
"query" : {
"function_score" : {
"filter" : {
"match_all" : { }
},
"functions" : [ {
"script_score" : {
"script" : "return doc['hotel.field'].value"
}
} ]
}
},
"path" : "rooms",
"score_mode" : "max"
}
}
}
}

问题是hotel.field 总是返回0。有没有办法访问嵌套查询中的父字段?我知道我总是可以将字段打包在嵌套文档中,但它是一个黑客而不是解决方案。使用 dismax 查询对我有帮助吗? https://discuss.elastic.co/t/nested-value-on-function-score/29935

我实际使用的查询如下所示:
{
"query" : {
"bool" : {
"must" : {
"nested" : {
"query" : {
"function_score" : {
"query" : {
"not" : {
"query" : {
"terms" : {
"rooms.type" : [ "single", "triple" ]
}
}
}
},
"functions" : [ {
"script_score" : {
"script" : {
"inline" : "return doc['rooms.magicScore'].value;",
"lang" : "groovy",
"params" : {
"ratings" : {
"sample" : 0.5
},
"variable" : [ 0.0, 0.0, 0.0, 0.0, -0.5, -2.5]
}
}
}
} ],
"score_mode" : "max"
}
},
"path" : "rooms"
}
},
"filter" : {
"bool" : {
"filter" : [ {
"bool" : {
"should" : [ {
"term" : {
"cityId" : "166"
}
}, {
"term" : {
"cityId" : "165"
}
} ]
}
}, {
"nested" : {
"query" : {
"not" : {
"query" : {
"terms" : {
"rooms.type" : [ "single", "triple" ]
}
}
}
},
"path" : "rooms"
}
} ]
}
}
}
}
}

我想要实现的是访问例如嵌套的 function_score 查询中的 cityId。

最佳答案

问题是你为什么要访问 nested 中的父值询问。一旦您在 nested上下文,您不能从其他 nested 访问父字段或其他字段领域。

来自 the documentation :

The nested clause “steps down” into the nested comments field. It no longer has access to fields in the root document, nor fields in any other nested document.



因此,重写您的查询,以便 nested部分触及该字段 nested访问字段和其他任何内容 外面 nested部分。

关于elasticsearch 嵌套函数ScoreQuery 无法访问父属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33734228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com