21
Мар
2017

Elasticsearch – не получается создать анализатор

Добрый день! Только начал работать с эластиком. Проблема в том, что поиск не возвращает все варианты. Я так понимаю дело в том, что у меня не настроен анализатор 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;
}

Вот как я и сказал - возвращаются не все результаты... Я думаю, что надо подключить анализатор. Кто может подсказать, как это сделать? Заранее спасибо!

Источник: https://ru.stackoverflow.com/questions/642511/elasticsearch-%D0%BD%D0%B5-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D0%B5%D1%82%D1%81%D1%8F-%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C-%D0%B0%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80

Share

Тебе может это понравится...