Поиск через ElasticSearch

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
KEFIR4UK
Сообщения: 97
Зарегистрирован: 2014.12.13, 16:24

Поиск через ElasticSearch

Сообщение KEFIR4UK »

Доброго времени суток.
Разбираюсь с ElasticSearch, и вот никак не выходит разобратся с полнотексным поиском. Изобилие оффицинальной документации уже совсем мне голову закружило.
Вообщем банальный поиск по одному полю хочу реализовать. Сейчас ищет только по полному совпадению так как использую "match", но хотелось бы что бы искало и с конца и с начала, да и если есть два слова то искало по второму слову если есть совпадение.
Вот настройка мапинга:

Код: Выделить всё

[
                'settings' => [
                    'analysis' => [
                        'analyzer' => [
                            'russian' => [
                                'tokenizer' => 'standard',
                                'filter' => ['lowercase'],
                            ],
                            'english' => [
                                'tokenizer' => 'standard',
                                'filter' => ['lowercase'],
                            ],
                        ]
                    ],
                ],
                'mappings' => [
                    self::type() => [
                        'properties' => [
                            'id' => ['type' => 'long'],
                            'firstName' => ['type' => 'string', "analyzer" => "standard"],
                            'lastName' => ['type' => 'string'],
                        ]
                    ],
                ],
            ]
Ну и сам запрос:

Код: Выделить всё

 $query = CustomerEs::find();

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
            'key' => 'id'
        ]);

        $this->load($params);

        if (!$this->validate()) {
            return $dataProvider;
        }
        if ($this->firstName) {
            $query->query(['match' => ['firstName' => $this->firstName]]);
        }

        return $dataProvider;
Вместо match ипользовал и другие типы query, но немного лутше себя показал только match_phrase_prefix - он исчет по началу слова.
Можете подасказать, может с мапангом что то не то или анализаторы не верно проставлены.
Зарание признателен.
Ответить