0

假设我有一组以 az 作为键的文档。我正在触发这个术语查询:

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' 没有' t 存在)或(标签 a 不存在且 'b' 的值为 wxyz)。

这可能吗。

我正在使用 ruby​​ 并正在使用“Tire”gem 连接到 elasticsearch。如果我也得到轮胎的相应语法,那么会更有帮助。

提前致谢

-阿兹塔布

4

2 回答 2

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"}
                        }
                    ]
                },

            ]
        }
    }
}
}
于 2012-11-07T05:50:16.147 回答
0

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

这意味着命中这两个查询的文档将具有更高的分数。

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

于 2012-11-06T07:11:04.153 回答