Разбираюсь с 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;
Можете подасказать, может с мапангом что то не то или анализаторы не верно проставлены.
Зарание признателен.