具有自定义字段名称的弹性搜索脚本
elasticsearch scripting with custom field name
基本上我想根据某些字段进行自定义脚本排序。它们的字段可能会根据不同的标准而有所不同。在我们启用动态脚本之前,这很好,因为我可以在我身边更改关键字。但是现在只允许按文件编写脚本。
这是我的查询:
curl -XPOST localhost:9200/_search -d '{
"query": {
"function_score": {
"query": {
...
},
"functions": [
{
"script_score": {
"file": "myFile",
}
}
]
}
}
}'
文件看起来像:
doc["keyword1"].value > 5 ? 5 : doc["keyword1"].value
虽然我可以根据关键字名称构建不同的查询(在那里使用不同的文件)。我想知道我们是否真的可以将关键字作为参数传递,这样就不需要在 scripts/ 文件夹下存储多个文件。
谢谢。
是的,这是可能的。您的脚本文件应如下所示:
doc[some_param].value > 5 ? 5 : doc[some_param].value
你的查询是这样的:
"functions": [
{
"script_score": {
"file": "test",
"params": {
"some_param": "keyword1"
}
}
}
]
基本上我想根据某些字段进行自定义脚本排序。它们的字段可能会根据不同的标准而有所不同。在我们启用动态脚本之前,这很好,因为我可以在我身边更改关键字。但是现在只允许按文件编写脚本。 这是我的查询:
curl -XPOST localhost:9200/_search -d '{
"query": {
"function_score": {
"query": {
...
},
"functions": [
{
"script_score": {
"file": "myFile",
}
}
]
}
}
}'
文件看起来像:
doc["keyword1"].value > 5 ? 5 : doc["keyword1"].value
虽然我可以根据关键字名称构建不同的查询(在那里使用不同的文件)。我想知道我们是否真的可以将关键字作为参数传递,这样就不需要在 scripts/ 文件夹下存储多个文件。
谢谢。
是的,这是可能的。您的脚本文件应如下所示:
doc[some_param].value > 5 ? 5 : doc[some_param].value
你的查询是这样的:
"functions": [
{
"script_score": {
"file": "test",
"params": {
"some_param": "keyword1"
}
}
}
]