我正在将以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的父记录。
这可能吗?
答案 0 :(得分:0)
我通过将parent_boolean_attribute
添加到ActualDocName索引来解决这个问题。它解决了我的问题,但我不知道这是最好的解决方案。