Elasticsearch - 返回父级已经给定属性的记录,或者根本没有父级

时间:2017-09-14 19:19:28

标签: elasticsearch

我正在将以Elasticsearch 0.9开头的应用程序升级到5.5,并且需要找到一种方法来重新实现预期的行为。

有一个索引,其映射如下:

{
  'parent' => {
    'properties' => {
      'boolean_attribute' => {
        'type' => 'bool
      }
    }
  },
  'actual_doc_name' => {
    '_parent' => {
      'type' => 'parent'
    },
    'properties' => {
      'title' => {
        'type' => 'string'
      }
    }
  }
}

原始应用程序行为将这些映射到Rails中的两个模型(Parent和ActualDocName,让我们说)。删除父项时,ActualDocName仍然是有效对象。当父母出现时,我经常想找到一个ActualDocName,其中ActualDocName的父母有一个' boolean_attribute' => '假&#39 ;.所以我设置了has_parent查询:

{
  'query' => {
    'bool' => {
      'must' => [
        { 'has_parent' => {
          'type' => 'parent',
          'filter' => {
            'term' => { 'boolean_attribute' => 'F' }
          }
        }
      }
    ]
  }
}

这很棒。它返回具有Parent的ActualDocName记录,其中' boolean_attribute'是假的。

但我需要在同一结果集中包含根本没有父级的ActualDocName记录。因此,我想要排除的唯一的ActualDocName记录是两个都有一个父AND并且父母的boolean_attribute为false的父记录。

这可能吗?

1 个答案:

答案 0 :(得分:0)

我通过将parent_boolean_attribute添加到ActualDocName索引来解决这个问题。它解决了我的问题,但我不知道这是最好的解决方案。