мой вопрос очень прост. Я хочу объединить два фильтра: один filter_bool и один filter_range в одном запросе в Elastica. Код
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. Пожалуйста, я буду признателен за любую помощь!
благодаря!
Почему бы вам не добавить фильтр диапазона, поскольку в bool
фильтр must
другой член:
$rangeFilter = new Elastica_Filter_Range(); $rangeFilter->addField('date', array( 'from' => $datepicker, 'to' => $datepicker1 ) ); $elasticaFilterBool->addMust($rangeFilter); $elasticaQuery->setFilter($elasticaFilterBool);
Вам нужно использовать фильтры, а не запросы, в булевом фильтре. Примечание. Я использовал Elastica_Filter_Range
вместо запроса диапазона, который вы использовали.
Кроме того, вы знаете, что используете устаревшую версию Elastica, новые используют пространства имен!