0

如何进行WHERE categoryId = 1 OR categoryId = 2查询Elastica?我正在这样做,但我得到了0 result

    $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();
4

1 回答 1

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

于 2015-07-07T08:46:38.357 回答