Как выполнить полнотекстовый поиск по частичным запросам Elasticsearch - PullRequest
1 голос
/ 04 июня 2019

Я использую Elasticsearch с Laravel, я все реализую, и он работает с простыми запросами на совпадение, как в коде выше.

'body' => [
                "query" => [
                       "bool" => [
                           "should" => [
                            ["regexp" => [
                               "tags" => [
                                   "value" => ".{2,8}" . $query . ".*",
                            ]
                            ],
                                ],
                            ["wildcard" => [
                               "tags" => [
                                   "value" => "*" . $query . "*",
                                   "boost" => 1.0,
                                   "rewrite" => "constant_score"
                                    ]
                                ]
                            ]
                        ]],
                    ], "highlight" => [
                    "fields" => [
                        "tags" => ["type" => "plain"]
                    ]
                ]
          ]

Я получаю хорошие результаты, например, по запросу "java" Я получаю и "javascript", и "nativjavascript", но проблема заключается в получении результатов по фразам.

Я хочу набратьзапросите "java реагировать" и хотите получить следующие результаты: "java", "javascript", "javascript activjs", "actjs "," реагировать "," nativjavascript ".

1 Ответ

2 голосов
/ 04 июня 2019

Я не знаком с Laravel, поэтому не могу предоставить вам точный синтаксис, но могу рассказать о подходе и о том, как я решил этот вариант использования в своем приложении.

  1. Создайте анализатор на основе n-грамма для ваших полей поиска, который будет разбивать токены на основе настроенного вами n-грамма.
  2. Разделите ваш поисковый термин на основе space, в вашем случае java react, следует разделить на 2 поисковых запроса java и react.
  3. Использовать анализатор ключевых слов в качестве search_time анализатора в полях поиска.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...