我目前正在进行多重匹配和功能评分的混合查询。 JSON的重要部分如下所示:
"function_score":{
"query":{
"query_string":{
"query":"some query",
"fields":["id","name","strippedDescription","colourSearch","sizeSearch"]
}
}
}
但是,我还希望包含不一定与查询匹配但具有大于0的特定数值的结果。我认为bool查询会执行此操作,但我不知道如何使用bool查询功能得分查询。
据我所知,多重匹配查询只是bool查询的简写,我可以将多重匹配查询扩展到其bool反向部分,但是,我当时不知道如何在其中进行功能评分
有什么想法吗?顺便说一下,我的版本是1.1.0。
答案 0 :(得分:23)
想出来!我错过了你可以在bool查询中嵌套多字段查询的事实!我的最终解决方案如下:
{
"query":{
"function_score":{
"query":{
"bool":{
"should": [
{
"range": {
"allBoost": {
"gt": 0
}
}
},{
"multi_match":{
"query":"some search query",
"fields":[
"id",
"name",
"description",
"category"
]
}
}
]
}
},
"functions":[
{
"filter":{
"range": {
"allBoost": {
"gt": 0
}
}
},
"script_score":{
"script":"doc['allBoost'].value"
}
},
{
"filter":{
"range": {
"allBoost": {
"lte": 0
}
}
},
"script_score":{
"script":"_score"
}
}
],
"boost_mode": "replace"
}
}
}