我知道solr支持查询中的if条件(例如fl=if(min(2,myField),2,myField)
)。我在弹性搜索中找不到类似的功能。我能找到的最接近的是脚本字段。
- elasticsearch是否支持像
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
下的脚本将被命名为CCD_ 6。
只有用java编写的本机脚本才能实现接口。在mvel、javascript python或groovy的情况下,您可以在文件中编写所需的脚本,而不是将其与相关的api一起传递并使用其名称引用它。