Elastica重写逻辑从旧版本到新版本3.1

时间:2016-02-26 17:21:14

标签: php elasticsearch elastica

我正在将我的类重新命名为Elastica的新逻辑,并想知道我是否采用了正确的方法。

我对带过滤器的查询的实际解决方案是:

<?php
// Create the actual search query
$elasticaQuery = new Elastica\Query();

$query = new Elastica\Query\MultiMatch();
$query->setQuery($queryParam);
$query->setFields(array('title^12', 'description', 'company_name'));
$query->setType("cross_fields");
$query->setOperator("and");

// check for filter
if(!is_null($type_id)){            

    //create bool query object
    $elasticaFilterBool = new Elastica\Filter\BoolFilter();

    // the term
    $filter1 = new Elastica\Filter\Term();
    $filter1->setTerm('job_type_id', (int)$type_id);                
    $elasticaFilterBool->addMust($filter1);

    // add the filter to the queryObject
    $elasticaQuery->setPostFilter($elasticaFilterBool);
}

$elasticaQuery
    ->setFrom(0)
    ->setSize(100)
    ->setSort(['find_date' => 'desc']);

// execute the query
$elasticaQuery->setQuery($query);

因为特别是在新版本中对过滤器进行了描述,我已经用这种方式重写了逻辑:

<?php
// Create the actual search query
$elasticaQuery = new Elastica\Query();

// create the multimatch
$query = new Elastica\Query\MultiMatch();
$query->setQuery($queryParam);
$query->setFields(array('title^12', 'description', 'company_name'));
$query->setType("cross_fields");
$query->setOperator("and");

//create bool query object
$elasticaFilterBool = new Elastica\Query\BoolQuery();

// check for filter
if(!is_null($type_id)){            
    $filter1 = new Elastica\Query\Term(array('job_type_id' => (int)$type_id));             
    $elasticaFilterBool->addMust($filter1);
}

// add the filter to the queryObject
$elasticaFilterBool->addMust($query);

$elasticaQuery
    ->setFrom(0)
    ->setSize(10)
    ->setSort(['find_date' => 'desc']);

$elasticaQuery->setQuery($elasticaFilterBool);

我在两个例子中都得到了相同的结果。

这是正确的方法吗?这意味着从这一点开始BoolQuery()包含所有过滤器和MatchAll()查询?

0 个答案:

没有答案