我想根據嵌套欄位的匹配百分比對 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 }
]
}
現在,我想執行查詢以查找哪些檔案具有特定作業,按匹配作業的百分比排序。例如:
- 搜索作業
1和2,我希望訂單是:- 鮑勃(66% 的職位匹配)
- 愛麗絲(50% 的職位匹配)
- 查爾斯(50% 的職位匹配)
- 搜索作業
2,我希望順序是:- 查爾斯(50% 的職位匹配)
- 鮑勃(33% 的職位匹配)
- 愛麗絲(25% 的職位匹配)
到目前為止,我正在使用以下查詢,但它按匹配數排序,而不是百分比:
{
"query": {
"nested": {
"path": "jobs",
"query": {
"bool": {
"should": [
{
"match": {
"jobs.id": "1"
}
},
{
"match": {
"jobs.id": "2"
}
}
]
}
},
"score_mode":"sum"
}
}
}
uj5u.com熱心網友回復:
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"
}
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/402208.html
標籤:弹性搜索 弹性搜索聚合 elasticsearch-dsl
上一篇:基本的彈性搜索自動完成
