2017-02-23 34 views
1

使用php dsl构建器,我试图创建一个SHOULD NOT查询。使用json查询语法,您可以在SHOULD布尔中嵌套MUST_NOT以创建一个。ElasticsearchDSL构建器如何创建不应该查询

{"bool": {"should": { "bool": {"must_not": {"match": {"thing": "thingy"}}}}}} 

通过ongr文档阅读它不清楚如何来实现相同的,因为5.0更新版本的结果。我试过以下内容:

$search = new Search(); 
$query = new MatchQuery('thing', 'thingy'); 
$search->addQuery($query, BoolQuery::MUST_NOT); 
$search->addPostFilter(BoolQuery::SHOULD); 

但这不起作用。

回答

2

为了巢布尔查询,则需要使用布尔查询:)你提供的例子可以用此代码段来实现:

$search = new Search(); 
$outerBoolQuery = new BoolQuery(); 
$innerBoolQuery = new BoolQuery(); 
$innerBoolQuery->add(new MatchQuery('thing', 'thingy'), BoolQuery::MUST_NOT); 
$outerBoolQuery->add($innerBoolQuery, BoolQuery::SHOULD);