Elasticsearch:如何匹配不存在的标签

时间:2012-11-06 06:45:45

标签: ruby elasticsearch tire

假设我有一组文件以a-z为键。 我正在解雇这个术语查询:

curl -X GET localhost:9200/memphis/pincode/_search?pretty=json -d '{"query":{"term":{"a":"abcd", "b":"wxyz"}}}'

这将返回所有'a'值为abcd且'b'值为wxyz的文档。 但是,如果我想要所有这些文件作为回报(如果'a'的值是abcd而'b'的值是wxyz)或者('a'的值是abcd而标签'b'没有',那该怎么办?存在)或(标记a不存在,'b'的值是wxyz)。

这可能。

我正在使用ruby并使用'Tire'gem连接到elasticsearch。因此,如果我也获得轮胎的相应语法,那将会更有帮助。

提前致谢

-Azitabh

2 个答案:

答案 0 :(得分:0)

您可以使用should子句在Bool查询中包装2个查询。

这意味着点击两个查询的文档将获得更高的分数。

请参阅http://www.elasticsearch.org/guide/reference/query-dsl/bool-query.html

答案 1 :(得分:0)

我在其他论坛上得到了答案。 放在这里只是为了完整:

http://www.elasticsearch.org/guide/reference/query-dsl/missing-filter.html

{
"query" : {
    "constant_score" : {
        "filter" : {
            "must" : [
                {
                    "should": [
                        {
                            "term": {"a" : "abcd"}
                        },
                        {
                            "missing": {"field": "a"}
                        }
                    ]
                },
                {
                    "should": [
                        {
                            "term": {"b" : "wxyz"}
                        },
                        {
                            "missing": {"field": "b"}
                        }
                    ]
                },

            ]
        }
    }
}
}