我的查询有问题。我使用查询来提升没有嵌套对象的文档。现在我使用nested_objects并更改查询以使用嵌套过滤器,但没有任何提升。 我得到了我预期的文件,但没有_score更改。
我做错了吗?
GET index/type/_search
{
"query": {
"function_score": {
"filter": {
"bool": {
"must": [
{
"term": {
"parent.child": "test"
}
}
]
}
},
"functions": [
{
"boost_factor": "100",
"filter": {
"nested": {
"path": "parent",
"filter": {
"bool": {
"must": [
{
"term": {
"child": "test"
}
}
]
}
}
}
}
}
],
"score_mode": "sum"
}
},
"sort": "_score",
"from": 0,
"size": 320
}
编辑: 可能是由
引起的嵌套过滤器
嵌套过滤器的行为与嵌套查询非常相似,但它除外 不接受score_mode参数。它只能用于 “过滤器上下文” - 例如在过滤的查询中 - 并且它的行为 像任何其他过滤器:它包括或排除,但它没有得分。
虽然嵌套过滤器本身的结果没有被缓存,但是 通常的缓存规则适用于嵌套过滤器内的过滤器。
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/nested-query.html
答案 0 :(得分:2)
正如文件所说:
嵌套过滤器
嵌套过滤器的行为与嵌套查询非常相似,只是它不接受score_mode参数。它只能在“过滤器上下文”中使用 - 例如在过滤后的查询中 - 它的行为与任何其他过滤器一样:它包括或排除,但它不会得分。
虽然嵌套过滤器本身的结果未缓存,但通常的缓存规则适用于嵌套过滤器内的过滤器。
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/nested-query.html
答案 1 :(得分:0)
我觉得你的JSON应该看起来更接近(可能不完全是,我还没有测试过)。
{
"query": {
"function_score": {
"query": {
"nested": {
"path": "parent",
"query": {
"bool": {
"must": [
{
"term": {
"parent.child": "test"
}
}
]
}
}
}
},
"functions": [
{
"boost_factor": "100"
}
],
"score_mode": "sum"
}
},
"sort": "_score",
"from": 0,
"size": 320
}
具体来说,您不想过滤boost_factor
,您只想将此function_score
提升100个。实际的嵌套查询虽然位于query
的{{1}}部分} {} function_score
部分只包含functions
。我想。