我有一个包含数千个文档的弹性搜索索引,每个文档代表一个用户。
每个文档都有一组字段(is_verified:boolean,country:string,is_creator:boolean),我还有另一个服务调用 ES 搜索来查找文档,我如何根据这些字段对检索到的文档进行排名?例如,经过验证的匹配用户应该比未验证的用户排在第一位。
在索引文档时是否有某种文档评分?如果是,我可以根据我的标准修改它吗?
我应该阅读/看什么来了解如何在弹性搜索中排名。
谢谢
答案 0 :(得分:1)
您可以考虑在您的搜索查询中使用 Sort Api,在下面的示例中,我们使用了字段 country 的搜索并根据布尔字段 (is_verified) 对结果进行了排序,您还可以在 Sort 括号内添加其他布尔字段.
GET /yourindexname/_search
{
"query" : {
"match" : {
"country": "Iceland"
}
},
"sort" : [
{
"is_verified": {
"order": "desc"
}
}
]
}
答案 1 :(得分:1)
我猜 Mikael 提到的排序功能非常简单,应该涵盖您的用例。查看 Elastic Doc 了解更多信息。
但是,如果您想进行真正花哨的排序,也许您可以使用 bool 查询和不同的提升值来为每个匹配的字段设置所需的相关性。它试图提出一个现实生活中的例子,但老实说没有找到。为完整起见,下面的代码片段应该让您了解如何获得与使用 sort API 类似的结果(但我仍然更喜欢使用 sort)。
GET /yourindexname/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"name": "Monica"
}
}
],
"should": [
{
"term": {
"is_verified": {
"value": true,
"boost": 2
}
}
},
{
"term": {
"is_creator": {
"value": true,
"boost": 2
}
}
}
]
}
}
}
<块引用>
在索引文档时是否有某种文档评分?如果是,我可以根据我的标准修改它吗?
我不会在索引时为文档分配固定分数,因为分数应该取决于查询。但是,如果您坚持要为每个文档预定义相关性,理论上您可以添加一个具有该值的字段 relevancy
用于排序并稍后在查询中使用它:
GET /yourindexname/_search
{
"query" : {
"match" : {
"name": "Monica"
}
},
"sort" : [
{
"relevancy": {
"order": "desc"
},
"_score"
}
]
}