Пытаюсь организовать поиск товаров на сайте.
Есть 3 поля joxi.ru/Bv29eohGoQ5g2G , это название товара, описание товара, и дополнительная информация куда собираются различные характеристики товара.
Например нужно организовать поиск по этим 3 полям что бы например поиск мог осуществляться по фразе:
- домашняя стрейчевая блузка
- женская блузка серого цвета
и т.д.
Использую Elasticsearch 2.4.6
Маппинг
- сами поля в мапинге
Вариант запроса через match дает плохой результат
$filters['query']['bool']['must'][]['match']['title'] =
[
'query' => $_q,
'operator' => 'and',
'type' => 'phrase_prefix',
'analyzer' => 'my_analyzer'
];
$filters['query']['bool']['should'][]['match']['description'] =
[
'query' => $_q,
'operator' => 'and',
'type' => 'phrase_prefix',
'minimum_should_match' => '75%',
'analyzer' => 'my_analyzer'
];
$filters['query']['bool']['should'][]['match']['other_data'] =
[
'query'=>$_q,
'operator'=>'and',
'type' => 'phrase_prefix',
'minimum_should_match' => '75%',
'analyzer'=>'my_analyzer'
];
Перестроил немного по другому также не отдает
foreach ($keys as $key){
$filters['query']['bool']['must'][]['match_phrase_prefix']['title'] = trim($key);
$filters['query']['bool']['should'][]['match_phrase_prefix']['description'] = trim($key);
$filters['query']['bool']['should'][]['match_phrase_prefix']['other_data'] = trim($key);
}
в данном случае я разбиваю фразу на слова и ищу через match_phrase_prefix