组合两个不同的过滤器在一个查询 - Elastica [英] Combination of two different filters in one Query - Elastica

查看:133
本文介绍了组合两个不同的过滤器在一个查询 - Elastica的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的问题很简单。我想合并两个过滤器一个filter_bool和一个filter_range在Elastica中的一个查询。代码是

my question is very simple. I want to combine two filters one filter_bool and one filter_range in one query in Elastica. The code is

public function getAdvancedTweetsEs($keyword, $location, $datepicker, $datepicker1, $offset)
{
    $elasticaClient = new Elastica_Client();

    // Load index
    $elasticaIndex = $elasticaClient->getIndex('mongoindex3');

    // Define a Query. We want a string query.
    $elasticaQueryString = new Elastica_Query_QueryString();
    //$elasticaQueryString->setDefaultOperator('AND');
    $elasticaQueryString->setQuery($keyword);

    // Create the actual search object with some data.
    $elasticaQuery = new Elastica_Query();
    $elasticaQuery->setQuery($elasticaQueryString);
    $elasticaQuery->setFrom(0);
    $elasticaQuery->setLimit($offset);

    //Set a filter in text
    $elasticaFilterBool = new Elastica_Filter_Bool();                
    $filter1 = new Elastica_Filter_Term();
    $filter2 = new Elastica_Filter_Term();
    $filter1->setTerm('text', array(strtolower($keyword)));
    $filter2->setTerm('location', array(strtolower($location)));        
    $elasticaFilterBool->addMust($filter1);
    $elasticaFilterBool->addMust($filter2);
    $elasticaQuery->setFilter($elasticaFilterBool);

    $range = new Elastica_Query_Range();
    $range->addField('date', 
                        array(  'from' => $datepicker,
                                'to' => $datepicker1
                             ) 
                     );                 

    //Search on the index.
    $elasticaResultSet = $elasticaIndex->search($elasticaQuery);

    $elasticaResults = $elasticaResultSet->getResults();

    $results = array();

    foreach ($elasticaResults as $elasticaResult) 
    {   
        $results[] = $elasticaResult->getData();
    }

    return $results;
}

我不能在$ elasticaQuery中将两个过滤器放在一起。

I can't put together two filters together in $elasticaQuery. Please I will appreciate any help!

感谢!

推荐答案

不要在 bool 过滤器中将另一个必须项添加范围过滤器:

Why don't you add the range filter as another must term in the bool filter:

$rangeFilter = new Elastica_Filter_Range();
$rangeFilter->addField('date', 
                    array(  'from' => $datepicker,
                            'to' => $datepicker1
                         ) 
                 ); 
$elasticaFilterBool->addMust($rangeFilter);
$elasticaQuery->setFilter($elasticaFilterBool);

您需要在布尔过滤器中使用过滤器,而不是查询。注意我已经使用 Elastica_Filter_Range ,而不是您使用的范围查询。

You need to use filters, not queries, in a boolean filter. Note I have used Elastica_Filter_Range instead of the range query you were using.

此外,您知道您正在使用过时版本的Elastica,新的使用命名空间!

Also, you know you are using an outdated version of Elastica, the new ones use namespaces!

这篇关于组合两个不同的过滤器在一个查询 - Elastica的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆