我是 ElasticSearch 的新手,想知道一旦您使用 mvel 语法定义了一个脚本字段,您是否可以随后对其进行过滤或在查询正文中引用它,就像它是任何其他字段一样?
我找不到任何这样的例子,同时我在文档页面上没有看到任何关于这是否可能的提及
http://www.elasticsearch.org/guide/reference/modules/scripting/ http://www.elasticsearch.org/guide/reference/api/search/script-fields/
ElasticSearch Server 这本书没有提到这是否可能
Vit*_*nko 11
对于 2018 和 Elastic 6.2,仍然无法按使用 定义的字段进行过滤script_fields,但是,您可以出于相同目的定义自定义脚本过滤器。例如,假设您已经定义了以下脚本字段:
{
"script_fields" : {
"some_date_fld_year":"doc["some_date_fld"].empty ? null : doc["some_date_fld"].date.year"
}
}
Run Code Online (Sandbox Code Playgroud)
你可以用它过滤
{
"query": {
"bool" : {
"must" : {
"script" : {
"script" : {
"source": " (doc["some_date_fld"].empty ? null : doc["some_date_fld"].date.year) >= 2017",
"lang": "painless"
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是不可能的,原因很简单:script_fields 是在搜索的最后阶段(获取阶段)计算的,并且仅针对您检索的记录(默认为前 10 个)。脚本过滤器应用于所有没有被前面的过滤器过滤掉的记录,它发生在查询阶段,在获取阶段之前。换句话说,当应用过滤器时,script_fields 还不存在。
| 归档时间: |
|
| 查看次数: |
6437 次 |
| 最近记录: |