如何在 Elasticsearch ruby​​ 查询中添加 OR 条件?

Posted

技术标签:

【中文标题】如何在 Elasticsearch ruby​​ 查询中添加 OR 条件?【英文标题】:How to add OR condition in Elasticsearch ruby query? 【发布时间】:2016-09-22 07:40:31 【问题描述】:

在我的用例中,我想在 Elasticsearch 查询中添加 OR 条件。这是我的查询,

  query_body = 
    'query' => 
        'bool' => 
            'must' => [ 'range' => '@timestamp' =>  'from' => stream_filters[:first_time].gmtime.strftime("%Y-%m-%dT%H:%M:%SZ"), 'to' => stream_filters[:second_time].gmtime.strftime("%Y-%m-%dT%H:%M:%SZ")   , 'term' => "@timeout" => true , 'term' => "@dest" => dest , 'term' => "@source" => source    ]
                 
              , 'facets' => facets
          

我想为@dest 加上'term' => "@dest" => ' ' 空检查以及'term' => "@dest" => dest

我尝试添加 or 条件,但它不起作用。

query_body = 
      'query' => 
          'bool' => 
              'must' => [ 'range' => '@timestamp' =>  'from' => stream_filters[:first_time].gmtime.strftime("%Y-%m-%dT%H:%M:%SZ"), 'to' => stream_filters[:second_time].gmtime.strftime("%Y-%m-%dT%H:%M:%SZ")   , 'term' => "@timeout" => true , 'term' => "@source" => source    ],
              'filter' => 
                  'or' => [
                      'term' =>  "@dest" => dest 
                      'term' =>  "@dest" => ' ' 
                      ]
                   
                  
                , 'facets' => facets
            

有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

您的过滤器子句中似乎有语法错误。请尝试以下正确的语法:

  'filter' => 
          'or' => [
                   
                     'term' =>  "@dest" => dest 
                   ,
                   
                      'term' =>  "@dest" => ' ' 
                   
                  ]
           

【讨论】:

以上是关于如何在 Elasticsearch ruby​​ 查询中添加 OR 条件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 ElasticSearch 客户端在应用程序范围内可用?

在 elasticsearch-ruby 中使用 percolate 进行批量索引

elasticsearch-ruby:转换

使用标准库Ruby将数据标记到Elasticsearch批量中

ruby Elasticsearch公式,用于在brew包管理器1中使用最新(0.90.7)版本的elasticsearch服务器。 brew安装弹性体

ruby 在Heroku上使用Rails&searchkick gem安全地使用Amazon Elasticsearch(签名请求)。