当前位置: 首页 > 面试题库 >

如何编写Elasticsearch多个必须脚本查询?

束俊英
2023-03-14
问题内容

我想使用查询来比较多个字段。我有字段1到4。我想搜索字段1大于字段2并且下面的查询工作正常的数据;

{
    "size": 0,
    "_source": [
        "field1",
        "field2",
        "field3",
        "field4"
    ],
    "sort": [],
    "query": {
        "bool": {
            "filter": [],
            "must": {
                "script": {
                    "script": {
                        "inline": "doc['field1'].value > doc['field2'].value;",
                        "lang": "painless"
                    }
                }
            }
        }
    }
}

现在,我想搜索哪个字段1大于字段2以及哪个字段3大于字段4的数据。根据Elastic
Search:如何编写多语句脚本?和此链接,我只需要用分号分隔每个语句。所以应该是这样的:

{
    "size": 0,
    "_source": [
        "field1",
        "field2",
        "field3",
        "field4"
    ],
    "sort": [],
    "query": {
        "bool": {
            "filter": [],
            "must": {
                "script": {
                    "script": {
                        "inline": "doc['field1'].value > doc['field2'].value; doc['field3'].value > doc['field4'].value;",
                        "lang": "painless"
                    }
                }
            }
        }
    }
}

但是该查询无效,并返回如下编译错误:

] .value> doc [‘field2’]。value; doc [‘field1’]。value> doc [‘field2’]。value;
“,” lang“:”无痛“,” caused_by“:{” type“:” illegal_argument_exception“,”
reason“:”不是声明。“}}}}]}}


问题答案:

您需要像这样结合两个条件:

doc['field1'].value > doc['field2'].value && doc['field3'].value > doc['field4'].value
                                           ^
                                           |
                               replace the semicolon by &&


 类似资料:
  • 问题内容: 我想使用查询来比较多个字段。我有字段1到4。我想搜索字段1大于字段2并且下面的查询工作正常的数据; 现在,我想搜索哪个字段1大于字段2以及哪个字段3大于字段4的数据。根据Elastic Search:如何编写多语句脚本?和此链接,我只需要用分号分隔每个语句。所以应该是这样的: 但是该查询无效,并返回如下编译错误: ] .value> doc [‘field2’]。value; doc

  • 问题内容: 我在Elasticsearch索引中的文档中存储了值。 我需要对值进行一些日期操作,并返回要在过滤器中使用的布尔值。 该脚本涵盖了几行,但我无法运行它。 我编写了其他可以正常工作的脚本,但是我对Groovy的了解甚少,而对Elastic search的了解却很少。 我可以用脚本找到的每个样本只有一行,只有一行。 所以基本上我将如何采用这个完全有效的脚本 并把它变成像 我对创建一个只写一

  • 很抱歉提出这个问题,但ElasticSearch查询可能会令人困惑。。。 目标:创建一个类似谷歌搜索查询的查询。输入的单词越多,得到的匹配结果越少。例如“四川酱”比“木兰四川酱”产生更多的结果。我的索引有一个博客文章类型,它有字段“标题”、“标签”、“类别”。ElasticSearch必须找到与查询中的所有单词相匹配的每个文档。文字可以遍布各个领域。例如,如果一个文档的标题包含“木兰”,它的标签包

  • 我目前正在尝试将一个基于Solr的应用程序迁移到ElasticSearch。 我有这个lucene查询 根据我的理解,这是一个必须子句与布尔OR结合的组合: “获取名称中包含(foo和bar)或信息中包含(foo和bar)的所有文档。之后,根据条件筛选结果state=1,并增强具有图像的文档。” 我一直试图在MUST中使用bool查询,但未能将boolean或转换为MUST子句。以下是我的资料:

  • 编写HTTP/1.1和HTTP/2.0脚本 有时,我们希望编写一个快速的脚本而不会遇到创建类的麻烦。addons机制具有一种速记方式,可以将模块作为一个整体视为一个addon对象。这使我们可以将事件处理程序函数放在模块作用域中。例如,下面是一个完整的脚本,它向每个请求添加标头。 def request(flow): flow.request.headers["myheader"] = "v

  • 问题内容: 我有一个用于Elasticsearch的简单JSON查询,如下所示: 仅当值(在这种情况下为“ a1”)不为空时,才如何执行第二个“必须”条件? 问题答案: 您可以使用以下方法实现它-