将逻辑查询映射到 elasticsearch 查询 DSL

Mapping logical queries to elasticsearch query DSL

我是 Elasticsearch 的新手。我正在尝试将基本逻辑查询映射到 elasticsearch 查询 DSL。

我知道 bool 用于对 ES 进行布尔(逻辑)查询。我可以映射查询,如 if (cond1 && cond2),但我无法理解如何进行 OR 查询,如 if(cond1 || cond2)

逻辑查询

if(attr1==val1 && attr2=val2){}

弹性搜索 DSL

"bool" : {
    "must" : {
        ["term":{"attr1":"val1"}, {"term":"attr2":"val2"}]
    }
}

我为 if(attr1==val1 || attr2==val2) 写什么?

您可以使用 |(或)运算符 (see docs):

s = search.Search()
s = s.filter(Q('term', attr1='val1') | Q('term', attr2='val2'))

这相当于

"bool" : {
    "should" : {
        ["term":{"attr1":"val1"}, {"term":"attr2":"val2"}]
    },
    "minimum_should_match": 1
}