gpt4 book ai didi

elasticsearch - 在Elasticsearch查询中使用两次检查

转载 作者:行者123 更新时间:2023-12-02 23:00:46 25 4
gpt4 key购买 nike

当满足以下条件时,我正在尝试从Elasticsearch索引中获取数据。

  • stream_id为空字符串(例如““)时
  • source_id是特定字符串(例如“unknown_source”)时

  • 我可以分别使用以下两个查询:
    用于检查空字符串:
    {
    "query": {
    "filtered": {
    "filter": {
    "script": {
    "script": "_source.stream_id.length() == 0"
    }
    }
    }
    }
    }

    用于检查 source_id
    {
    "query": {
    "bool" : {
    "must" : {
    "term" : { "source_id" : "unknown_source" }
    }
    }
    }
    }

    但是现在我看到在ES 2.0版中不推荐使用“过滤”查询,而我正在使用2.1版。那么,如何与这两个条件相加呢?我查看了过滤的查询页面文档,它说

    Use the bool query instead with a must clause for the query and a filter clause for the filter.



    因此,当时我正在尝试以下查询,但无法正常工作。
    {
    "query": {
    "bool": {
    "must" : {
    "term" : { "source_id" : "unknown_source" }
    },
    "filter": {
    "script": {
    "script": "_source.stream_id.length() == 0"
    }
    }
    }
    }
    }

    最佳答案

    您可以使用bool/must部分中的filter这样做(因为您无需计分)

    {
    "query": {
    "bool": {
    "filter": {
    "bool": {
    "must": [
    {
    "script": {
    "script": "_source.stream_id.length() == 0"
    }
    },
    {
    "term": {
    "source_id": "unknown_source"
    }
    }
    ]
    }
    }
    }
    }
    }

    或者您也可以保留两个级别,并将其全部保留在查询上下文中(即使您不关心计分)
    {
    "query": {
    "bool": {
    "must": [
    {
    "script": {
    "script": "_source.stream_id.length() == 0"
    }
    },
    {
    "term": {
    "source_id": "unknown_source"
    }
    }
    ]
    }
    }
    }

    关于elasticsearch - 在Elasticsearch查询中使用两次检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767085/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com