2017-09-14 55 views
0

我正在升级从Elasticsearch 0.9开始到5.5的应用程序,并且需要找到重新实现预期行为的方法。Elasticsearch - 返回父母给定属性或完全没有父级的记录

没有与这样的映射索引:在Rails的

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

原来的应用程序行为,这些映射到两个模型(父母和ActualDocName,让我们说)。当父项被删除时,ActualDocName仍然是一个有效的对象。当父母在场时,我经常想要找到ActualDocName,其中ActualDocName的Parent具有'boolean_attribute'=>'false'。所以我成立了一个has_parent查询:

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

这很好。它返回具有Parent的ActualDocName记录,其中'boolean_attribute'为false。

但我需要在同一个结果集中包含ActualDocName记录根本没有父项。因此,我想要排除的唯一ActualDocName记录是那些既有父项又有父项的boolean_attribute为假的父项。

这可能吗?

回答

0

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