弹性搜索是否支持条件查询



我知道solr支持查询中的if条件(例如fl=if(min(2,myField),2,myField))。我在弹性搜索中找不到类似的功能。我能找到的最接近的是脚本字段。

  1. elasticsearch是否支持像min(max(myField,0),1)这样的嵌套函数查询
  2. 如果是,它是否也支持像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一起传递并使用其名称引用它。

最新更新