Combining two different filters in one Query - 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

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; } 

I cannot assemble two filters together in $ elasticaQuery. Please, I will be grateful for any help!

thanks!

+4
source share
1 answer

Why don't you add a range filter as another must member to the bool filter:

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

You need to use filters, not queries, in a boolean filter. Note. I used Elastica_Filter_Range instead of requesting the range that you used.

In addition, you know that you are using an older version of Elastica, new ones use namespaces!

+4
source

Source: https://habr.com/ru/post/1501061/


All Articles