0

假设我们有以下过滤:field > 0 AND field != value

我对 elasticsearch 必须使用 bool 查询来表达该过滤器的多种方式有点混淆。考虑以下查询:

查询一

"bool":{
    "must_not":{
        "term":{
            "field": value        
        }    
    },
    "must":{
        "range":{
            "field":{
                "gt":0
            }
        }
    }

}

查询 2:

"bool":{
    "must_not":{
        "term":{
            "field": value        
        }    
    },
    "filter":{
        "range":{
            "field":{
                "gt":0
            }
        }
    }

}

查询 3

"bool":{
    "must":{
        "bool":{
            "must":{
                "range":{
                    "field":{
                        "gte":value
                    }
                }
            },
            "must_not":{
                "field":value
            }
        }
    }        
}

查询 1 和 2 的意思是一样的吗?此外,尽管我已经看到了查询 3 形式的许多示例(must|should|must_not 子句中的布尔查询),但在验证查询时会产生错误:

org.elasticsearch.index.query.QueryParsingException: [_na] query malformed, no field after start_object'}

这个错误是什么意思?正确的形式是怎样的?为什么有这么多过滤结果的方法?

4

0 回答 0