假设我有3个文档(用户),并且他们具有多种编程语言的知识 - 如下所述,分数相关,我如何搜索多个字段(例如,多个匹配),以及是否有一些搜索关键字击中一种语言,按其分数排序?
vertical_layout
例如:搜索" John python" 应返回user1和user2,但user2首先显示
**我一直在尝试使用排序和功能,但我认为他们总是使用得分的最低/最高/平均值。
谢谢!
[编辑] **与此同时,我让它以测试方式工作,看看是否没有全文/多重匹配的作品,我发现我必须制作" prog_langs"嵌套,所以我改变了映射,它按预期工作。
现在我只缺少使用多重匹配的全文搜索与当前查询合并的部分。
再次感谢!
答案 0 :(得分:0)
我设法修复了查询,现在它按预期工作了。
在发布我的解决方案之前,只需要记住一些事情:
{
"query": {
"bool": {
"must": [
{
"query": {
"match": {
"name": {
"query": "john python",
"boost": 5
}
}
}
},
{
"bool": {
"should": [
{
"nested": {
"path": "prog_langs",
"query": {
"match": {
"prog_langs.name": {
"query": "john python",
"boost": 5
}
}
}
}
}
]
}
}
],
"should": [
{
"function_score": {
"query": {
"match": {
"prog_langs.name": "john python"
}
},
"functions": [
{
"script_score": {
"script": "_score * (1 + doc['prog_langs.score'].value)"
}
}
]
}
}
]
}
},
"highlight": {
"fields": {
"name": {},
"prog_langs.name": {}
}
}
}