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