2015-06-14 92 views
0

如何使用Elastica查询WHERE categoryId = 1 OR categoryId = 2?我这样做,但我得到了0 resultElastica PHP查询哪里或

$query = new \Elastica\Query(); 
    $boolOr = new \Elastica\Filter\BoolOr(); 
    $boolOr->addFilter(new \Elastica\Filter\Term(array('categoryId' => '1'))); 
    $boolOr->addFilter(new \Elastica\Filter\Term(array('categoryId' => '2'))); 
    $filtered = new \Elastica\Query\Filtered(new \Elastica\Query\MatchAll(), $boolOr); 
    $query->setQuery($filtered); 
    $products = $type->search($query)->getResults(); 

回答

1

这里是一个工作示例:

$index = $this->_createIndex(); 
$type = $index->getType('test'); 

$doc1 = new Document('', array('categoryId' => 1)); 
$doc2 = new Document('', array('categoryId' => 2)); 
$doc3 = new Document('', array('categoryId' => 3)); 

$type->addDocument($doc1); 
$type->addDocument($doc2); 
$type->addDocument($doc3); 

$index->refresh(); 

$boolOr = new \Elastica\Filter\BoolOr(); 
$boolOr->addFilter(new \Elastica\Filter\Term(array('categoryId' => '1'))); 
$boolOr->addFilter(new \Elastica\Filter\Term(array('categoryId' => '2'))); 

$resultSet = $type->search($boolOr); 

你不需要使用过滤和matchall查询。这个工作的例子可以在这里找到:https://github.com/ruflin/Elastica/pull/887/files

+0

这个答案已被弃用在更高版本,我找不到\ Elastica \ Query \?相当于它。 @ruflin有什么想法? – pcm