Только начал работать с эластиком. Проблема в том, что поиск не возвращает все варианты. Я так понимаю дело в том, что у меня не настроен анализатор russian (https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html#russian- analyzer)
Но у меня не получается его настроить.. Прошу помочь тем, кто в курсе как это сделать. Вот код создания индекса и наполнения его данными для поиска из БД:
require 'vendor/autoload.php';
$client = \Elasticsearch\ClientBuilder::create()->setHosts([ES_HOST])->build();
$params = [];
$params['index'] = ES_INDEX;
//Удаляю индекс
if($client->indices()->exists($params)){
$response = $client->indices()->delete($params);
}
//Создаю запись
if(! $client->indices()->exists($params)){
$index = $client->index([
'index' => ES_INDEX,
'type' => ES_TYPE,
'id' => ES_ID,
'body' => []
]);
}
$sql = "SELECT id, `name` FROM salons_services";
$result = $conn->query($sql);
//Заполняю индекс значениями для поиска
foreach ($result as $row) {
$params['body'][] = [
'index' => [
'_index' => ES_INDEX,
'_type' => ES_TYPE,
]
];
$params['body'][] = [
'tableid' => $row['id'],
'tablename' => trim($row['name'])
];
}
$responses = $client->bulk($params);
А потом этой функцией ищу IDники по слову
function searchES($word) {
$client = \Elasticsearch\ClientBuilder::create()->setHosts([ES_HOST])->build();
$IDs = [];
$params = [];
$params['index'] = ES_INDEX;
if ($client->indices()->exists($params)) {
$params['type'] = ES_TYPE;
$params['body']['query']['match']['tablename'] = trim($word);
$result = $client->search($params);
if ($result['hits']['total'] > 0) {
$result = $result['hits']['hits'];
foreach ($result as $val) {
$k = $val['_source']['tableid'];
$IDs[$k] = $k;
}
}
}
return $IDs;
}
Вот как я и сказал - возвращаются не все результаты... Я думаю, что надо подключить анализатор. Кто может подсказать, как это сделать? Заранее спасибо!