Я тестирую Elastica и Elastic Search. Я пытаюсь добавить фильтр в свой запрос, который возвращает результаты только по местоположению города. Он возвращается пустым. Я пробовал фильтр по имени пользователя и так далее, и он всегда возвращает пустое, так что, похоже, мое понимание не совсем корректно. Вот мой код для анализа, карты, а затем искать с фильтромФильтр Elastica не работает
$elasticaIndex = $elasticaClient->getIndex('users');
// Create the index new
$elasticaIndex->create(
array(
'analysis' => array(
'analyzer' => array(
'indexAnalyzer' => array(
'type' => 'custom',
'tokenizer' => 'standard',
'filter' => array('lowercase', 'lb_ngram')
),
'searchAnalyzer' => array(
'type' => 'custom',
'tokenizer' => 'standard',
'filter' => array('standard', 'lowercase', 'lb_ngram')
)
),
'filter' => array(
'lb_ngram' => array(
"max_gram" => 10,
"min_gram" => 1,
"type" => "nGram"
)
)
)
), true
);
//Create a type
$elasticaType = $elasticaIndex->getType('profile');
// Set mapping
$mapping->setProperties(array(
//'id' => array('type' => 'integer', 'include_in_all' => FALSE),
'firstName' => array('type' => 'string', 'include_in_all' => TRUE),
'lastName' => array('type' => 'string', 'include_in_all' => TRUE),
'username' => array('type' => 'string', 'include_in_all' => TRUE),
'bio' => array('type' => 'string', 'include_in_all' => TRUE),
'thumbnail' => array('type' => 'string', 'include_in_all' => FALSE),
'location' => array('type' => 'string', 'include_in_all' => TRUE),
));
..... Тогда искать, я следующий
$elasticaQueryString = new Elastica\Query\QueryString();
//'And' or 'Or' default : 'Or'
$elasticaQueryString->setDefaultOperator('AND');
$elasticaQueryString->setQuery($term);
// Create the actual search object with some data.
$elasticaQuery = new Elastica\Query();
$elasticaQuery->setQuery($elasticaQueryString);
Чтобы добавить фильтр
$elasticaFilterLocation = new \Elastica\Filter\Term();
//search 'location' = $region;
$elasticaFilterLocation->setTerm('location', $region);
$elasticaQuery->setFilter($elasticaFilterLocation);
$elasticaResultSet = $elasticaIndex->search($elasticaQuery);
$elasticaResults = $elasticaResultSet->getResults();
Если я прокомментирую фильтр, я получу ожидаемые результаты. Что мне не хватает? Это связано с анализатором или картографированием?
Можете ли вы предоставить более подробную информацию? Например, как вы сменили свой анализатор и на что вы его изменили? – landland
Я использовал 2 пользовательских анализатора 1 для электронной почты, токенизатор: uax_url_email, а другой для слов (например, случай вашего местоположения), токенизатор: стандартный, делал некоторые вещи по пробной версии и ошибкам, так как документации не много ... Скажите, если вам нужна помощь – CodeBird
да, пожалуйста, помогите. Я вращаю свои колеса здесь, становясь нигде. Документация очень скудная. Я попытался использовать токенизатор: стандартный для местоположения и перестроил мой индекс, но он все равно возвращает пустое. – landland