我知道 solr 支持查询中的 if 条件(例如,fl=if(min(2,myField),2,myField)
)。我无法在弹性搜索中找到类似的功能。我能找到的最接近的是script fields。
- elasticsearch 是否支持嵌套函数查询
min(max(myField,0),1)
? - 如果是这样,它是否也支持这样的排序查询,比如
sort=min(max(myField,0),1)
?
我知道 solr 支持查询中的 if 条件(例如,fl=if(min(2,myField),2,myField)
)。我无法在弹性搜索中找到类似的功能。我能找到的最接近的是script fields。
min(max(myField,0),1)
?sort=min(max(myField,0),1)
?脚本是您正在寻找的。默认脚本语言是mvel,但您可以轻松安装支持其他语言的插件,例如javascript、groovy、python。您还可以用 Java 编写自己的本机脚本。
您可以在不同的 api 中使用脚本,以下是一些示例:
可以从文档页面预加载将它们放置在文件系统上的脚本:
脚本始终可以作为相关 API 的一部分提供,但也可以通过将它们放在下面
config/scripts
然后通过脚本名称引用它们来预加载它们(而不是提供完整的脚本)。这有助于减少客户端和节点之间传递的数据量。脚本的名称来源于它所在目录的层次结构,以及不带 lang 扩展名的文件名。例如,放置在下面的脚本
config/scripts/group1/group2/test.py
将被命名为group1_group2_test
.
只有用 java 编写的本机脚本必须实现接口。对于 mvel、javascript python 或 groovy,您可以只在文件中编写您需要的脚本,而不是将其与相关 api 一起传递并使用其名称引用它。