제 질문은 매우 간단합니다. Elastica의 하나의 쿼리에서 두 개의 필터를 하나의 filter_bool과 하나의 filter_range를 결합하고 싶습니다. 코드는
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에서 두 개의 필터를 함께 사용할 수 없습니다. 도움을 주시면 감사하겠습니다!
감사!
범위 필터를 필터의 다른 must
용어 로 추가하지 않는 이유 bool
:
$rangeFilter = new Elastica_Filter_Range();
$rangeFilter->addField('date',
array( 'from' => $datepicker,
'to' => $datepicker1
)
);
$elasticaFilterBool->addMust($rangeFilter);
$elasticaQuery->setFilter($elasticaFilterBool);
부울 필터에서 쿼리가 아닌 필터를 사용해야합니다. 참고 사용 Elastica_Filter_Range
하던 범위 쿼리 대신 사용했습니다.
또한 오래된 버전의 Elastica를 사용하고 있다는 것을 알고 있으며, 새로운 버전은 네임 스페이스를 사용합니다!
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다