【问题标题】:Exclude nil values from ElasticSearch Aggregation从 ElasticSearch 聚合中排除 nil 值
【发布时间】:2014-11-30 19:10:47
【问题描述】:

我使用这个查询来检索最重要的值:

keywords = Answer.search( 
    :size => 5, 
    :query => { 
        :match => {
            :question_id => 32481
         }
    }, 
    :aggregations => { 
        :keywords => { 
            :significant_terms => {
                :field => 'text'
            }
        }
    }
)

字段是:text,但它的值为零,所以答案总是:

2.1.2 :135 > keywords.map(&:text)
=> [nil, nil, nil, nil, nil]

我尝试添加一个过滤器,正如the documentation 建议的那样,但它给了我一个解析错误:

keywords = Answer.search( 
    :size => 5, 
    :query => { 
        :match => {
            :question_id => 32481
         },
         :filtered => {
             :filter => {
                 :exists => { :field => 'text' }
             }
         }
    }, 
    :aggregations => { 
        :keywords => { 
            :significant_terms => {
                :field => 'text'
            }
        }
    }
)

我尝试了很多组合,但都没有成功。我怎样才能只获得有效的文本答案?

【问题讨论】:

  • 试试keywords.map(&:text).compact
  • 我相信这不是解决方案。我使用后一个查询从弹性搜索中得到一个解析错误。第一个结果的紧凑方法只会返回一个空数组。

标签: ruby-on-rails elasticsearch filtering aggregation


【解决方案1】:

我相信你的 ES 查询应该翻译成这样的:

  "size": 5,
  "query": {
    "filtered": {
      "query": { "match": { "question_id" : 32481 } },
      "filter": {
        "exists": {
          "field": "text"
        }
      }
    }
  },
  "aggs": {
    "keywords": {
      "significant_terms": {
        "field": "text"
      }
    }
  }

意味着您的“question_id”“匹配”应包含在“过滤”元素中。

【讨论】:

    猜你喜欢
    • 2021-11-06
    • 2017-10-26
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2021-02-11
    • 2022-01-26
    • 2015-01-23
    相关资源
    最近更新 更多