gpt4 book ai didi

elasticsearch - 按嵌套字段匹配的百分比对 ElasticSearch 结果进行排序

转载 作者:行者123 更新时间:2023-12-05 05:50:18 27 4
gpt4 key购买 nike

我想根据嵌套字段的匹配百分比对 ElasticSearch 查询结果进行排序。

例如,假设我有一个结构如下的 ElasticSearch 索引:

{
"properties": {
"name": {
"type": "text"
},
"jobs": {
"type": "nested",
"properties": {
"id": {
"type": "long"
}
}
}
}
}

具有以下文件:

{
"name": "Alice",
"jobs": [
{ "id": 1 },
{ "id": 2 },
{ "id": 3 },
{ "id": 4 }
]
}
{
"name": "Bob",
"jobs": [
{ "id": 1 },
{ "id": 2 },
{ "id": 3 }
]
}
{
"name": "Charles",
"jobs": [
{ "id": 2 },
{ "id": 3 }
]
}

现在,我想执行查询以查找哪些文档具有特定职位,按匹配职位的百分比排序。例如:

  • 搜索工作 12,我希望顺序是:
    1. Bob(66% 的职位匹配)
    2. 爱丽丝(50% 的职位匹配)
    3. 查尔斯(50% 的职位匹配)
  • 正在搜索工作 2,我希望顺序是:
    1. 查尔斯(50% 的职位匹配)
    2. 鲍勃(33% 的职位匹配)
    3. 爱丽丝(25% 的职位匹配)

到目前为止,我使用的是以下查询,但它按匹配项数而不是百分比排序:

{
"query": {
"nested": {
"path": "jobs",
"query": {
"bool": {
"should": [
{
"match": {
"jobs.id": "1"
}
},
{
"match": {
"jobs.id": "2"
}
}
]
}
},
"score_mode":"sum"
}
}
}

最佳答案

script_score似乎做的工作:

{
"query": {
"function_score": {
"query": {
"nested": {
"path": "jobs",
"query": {
"bool": {
"should": [
{
"match": {
"jobs.id": "1"
}
},
{
"match": {
"jobs.id": "2"
}
}
]
}
},
"score_mode": "sum"
}
},
"script_score": {
"script": {
"source": "_score / params['_source']['jobs'].length"
}
}
}
}
}

关于elasticsearch - 按嵌套字段匹配的百分比对 ElasticSearch 结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70533672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com