如何将简单的 groovy 脚本转换为 lucene 表达式(或使用不同的方法)?
How to convert simple groovy script to lucene expression (or use different method)?
我正在使用以下搜索选项:
scriptSort =
_script:
script: "if(doc['user.roles'].value=='contributor') return 1; else return 2;",
type: "number",
order: "asc"
options =
query: ...
size: ...
from: ...
aggs: ...
sort: [scriptSort]
如您所见,我正在使用 _script
选项对结果进行排序。问题是我正在使用的搜索服务放弃了对 groovy
脚本语言的支持,我不得不以某种方式将此脚本重写为名为 Lucene expressions
.
的东西
只是一次尝试,但它应该是一种非常通用的方法。根据 user.roles
字段的值,使用 function_score
定义您自己的筛选器,这些筛选器的评级应该不同。在我的示例中,我认为您应该将 "match_all": {}
替换为 query
下的任何内容(这就是我询问完整查询的原因):
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"filter": {
"term": {
"user.roles": "contributor"
}
},
"weight": 1
},
{
"filter": {
"bool": {
"must_not": [
{
"term": {
"user.roles": "contributor"
}
}
]
}
},
"weight": 2
}
],
"boost_mode": "replace"
}
},
"sort": [
{
"_score": {
"order": "asc"
}
}
]
}
我正在使用以下搜索选项:
scriptSort =
_script:
script: "if(doc['user.roles'].value=='contributor') return 1; else return 2;",
type: "number",
order: "asc"
options =
query: ...
size: ...
from: ...
aggs: ...
sort: [scriptSort]
如您所见,我正在使用 _script
选项对结果进行排序。问题是我正在使用的搜索服务放弃了对 groovy
脚本语言的支持,我不得不以某种方式将此脚本重写为名为 Lucene expressions
.
只是一次尝试,但它应该是一种非常通用的方法。根据 user.roles
字段的值,使用 function_score
定义您自己的筛选器,这些筛选器的评级应该不同。在我的示例中,我认为您应该将 "match_all": {}
替换为 query
下的任何内容(这就是我询问完整查询的原因):
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"functions": [
{
"filter": {
"term": {
"user.roles": "contributor"
}
},
"weight": 1
},
{
"filter": {
"bool": {
"must_not": [
{
"term": {
"user.roles": "contributor"
}
}
]
}
},
"weight": 2
}
],
"boost_mode": "replace"
}
},
"sort": [
{
"_score": {
"order": "asc"
}
}
]
}