Нужна помощь в написании запроса


(Igor Tulashvili) #1

Пытаюсь организовать поиск товаров на сайте.

Есть 3 поля joxi.ru/Bv29eohGoQ5g2G , это название товара, описание товара, и дополнительная информация куда собираются различные характеристики товара.

Например нужно организовать поиск по этим 3 полям что бы например поиск мог осуществляться по фразе:

  • домашняя стрейчевая блузка
  • женская блузка серого цвета

и т.д.

Использую Elasticsearch 2.4.6

Маппинг

http://joxi.ru/WL21e4h6bOVk2X

  • сами поля в мапинге

http://joxi.ru/JMAjVZtvPLZWAe

Вариант запроса через 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


(Igor Motov) #2

Что значит "плохой"?


(Igor Tulashvili) #3

Например когда я ищу джинсы милитари он мне отдает сначала не совсем джинсы
http://joxi.ru/812MKls4B7VwrJ

А запрос джинсы с рисунком
http://joxi.ru/WKAxRNU4P6zzm8

Или вот так
http://joxi.ru/jgmvZzcxPQ7Nma

Вопрос в том как бы отсеять лишнее, но что бы не уменьшить количество товаров в выдаче.

Потому что когда я использую must в 3 полях, выдача существенно уменьшается или показывает 0 товаров


(Igor Motov) #4

Это как отсеять, но не уменьшить? Куда мы тогда отсеивать-то будем?

Если вам надо показать все, но вас не устраивает то, что оказывается на первой странице, вам надо улучшить релевантность. Это процесс достаточно сложный, поэтому я бы посоветовал начать с изучения Definitive Guide. Если после этого будут вопросы - спрашивайте.


(system) #5

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.