组合两个不同的过滤器在一个查询 - Elastica [英] Combination of two different filters in one Query - 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屋!