【发布时间】:2017-08-31 23:18:55
【问题描述】:
假设我有 3 个文档(用户),并且他们具有多种编程语言的知识 - 与相关的分数,如下所述,我如何搜索多个字段(例如多重匹配),以及是否有一些搜索关键字命中一种语言,按其分数排序?
// user1
{
"name": "John Bayes",
"prog_langs": [
{
"name": "python",
"score": 10
},
{
"name": "java",
"score": 500
}
]
}
// user2
{
"name": "John Russel",
"prog_langs": [
{
"name": "python",
"score": 100
},
{
"name": "PHP",
"score": 200
}
]
}
// user3
{
"name": "Terry Guy",
"prog_langs": [
{
"name": "C++",
"score": 600
},
{
"name": "Javascript",
"score": 200
}
]
}
例如:搜索“John python” 应该返回 user1 和 user2,但 user2 首先出现
**我一直在尝试使用排序和函数,但我认为它们总是使用最低/最高/平均值的分数。
谢谢!
[编辑] **与此同时,我以测试的方式让它工作,看看是否没有全文/多匹配的作品,我发现我必须使“prog_langs”嵌套,所以我改变了映射,它按预期工作。
现在我只遗漏了具有多重匹配的全文搜索与当前查询合并的部分。
再次感谢!
【问题讨论】:
-
那么,现在什么不起作用?你能分享你正在做的查询以及它们有什么问题吗?
-
我将很快发布带有查询的编辑,但问题是,如果我直接查询 prog_langs,我现在只能根据匹配的查询进行排序。我的目标是,用户可以输入他想要的任何内容(我文档中的任何字段都是可搜索的),如果它是 prog_lang,我想按匹配的语言的分数对文档进行排序,而我最后的结果恰好是排序的以一种奇怪的方式(奇怪的是我认为不正确的结果)
-
抱歉,我正在查看查询并决定尝试进行一些小的更改,我想我实现了我想要的。如果一切都按预期工作,将在这里为每个人发布查询!
标签: elasticsearch