Elasticsearch:has_child具有类似外部联接的行为

时间:2018-11-17 20:22:34

标签: elasticsearch

我的Elasticsearch 6.x索引包含通过“项目”链接的“项目”(父项)和“颜色”(子项)类型的文档

 $scope.ExportoExcel = function () {
        $scope.date = new Date();
        $("#printtable").table2excel({
            exclude: "",
            filename: "Hotel"+ $scope.TypeName + "-Report-" + $scope.date + ".xls"
        });


    }

此处的项目可以具有值a,b,c,d。 它们可以是以下颜色之一:白色,黄色,红色,绿色,黑色。 我正在尝试编写一个查询,该查询将返回类型为“项目”的文档,该文档可以是“白色”,但不能是“黑色”或“黑色”,但不能是“白色”,或者既不是“白色”也不是“黑色”。给定上面给出的数据,此查询将返回:

{"item": "a", "type": "items"},
{"item": "b", "type": "items"},
{"item": "c", "type": "items"},
{"item": "d", "type": "items"},

{"item": "a", "color": "white", "type": "colors"}
{"item": "a", "color": "red", "type": "colors"}
{"item": "a", "color": "yellow", "type": "colors"}
{"item": "a", "color": "green", "type": "colors"}
{"item": "a", "color": "black", "type": "colors"}


{"item": "b", "color": "red", "type": "colors"}
{"item": "b", "color": "yellow", "type": "colors"}
{"item": "b", "color": "green", "type": "colors"}
{"item": "b", "color": "black", "type": "colors"}

{"item": "c", "color": "white", "type": "colors"}
{"item": "c", "color": "red", "type": "colors"}
{"item": "c", "color": "yellow", "type": "colors"}
{"item": "c", "color": "green", "type": "colors"}


{"item": "d", "color": "red", "type": "colors"}
{"item": "d", "color": "yellow", "type": "colors"}
{"item": "d", "color": "green", "type": "colors"}

我尝试过的查询:

{"item": "b", "type": "items"} // "black", but no "white"
{"item": "c", "type": "items"} // "white", but no "black"
{"item": "d", "type": "items"} // no "white", and no "black"

返回所有文档,因为它的操作是“ NOT(color = WHITE and color = BLACK)”,而color = WHITE和color = BLACK始终为FALSE,不是FALSE = TRUE。 在SQL中,我可以使用自我和外部联接在一个查询中做到这一点,而在Elastic中是无法做到的。 我也尝试了(color = WHITE and color!= BLACK)OR(color = BLACK and color!= WHITE)OR(color!= WHITE and color!= BLACK),但是由于相同的原因,它不起作用。 不胜感激。

0 个答案:

没有答案