Как я могу повлиять на запрос автозапроса Elasticsearch, чтобы сначала получить точное совпадение? - PullRequest
0 голосов
/ 12 сентября 2018

Рассмотрим следующие названия должностей, которые проиндексированы в 3 отдельных документа:

[ "Software Developer Analyst, Senior",
      "Software Developer and Analyst - iOS, iPad, . Net",
      "Software Developer" ]

В реальном мире у нас есть сотни вариантов для "разработчика программного обеспечения", поэтому, если автозаполнение возвращает только 10 документов, оно, вероятно, погружено в шум.

Можно ли сделать какой-либо заказ, чтобы выбрать точные совпадения?

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters-completion.html

1 Ответ

0 голосов
/ 13 сентября 2018

Подсказчик завершения использует FST (специальную структуру данных в памяти, построенную во время индекса) для быстрого поиска, поэтому можно влиять на результаты будущих запросов только во время индекса (см. проблема , относящаяся кваш вопрос на GitHub).

В вашем случае вы можете добавить context для вашего подсказчика.Например, это может быть поле category, которое будет содержать особенности конкретного разработчика программного обеспечения.Такие функции должны быть каким-то образом извлечены из данных, которые будут индексироваться:

PUT jobs/_doc/1
{
    "suggest": "Software Developer and Analyst - iOS, iPad, . Net",
    "category": ["apple", "ios", "ipad", "dotnet"] 
}

И во время запроса вы должны попытаться извлечь эти функции из пользовательского ввода перед отправкой его в ES.Например, если пользователь вводит «старший разработчик программного обеспечения java», вы преобразуете эти входные данные в запрос

POST jobs/_search
{
    "suggest": {
        "jobs_suggestion" : {
            "prefix" : "java senior software developer",
            "completion" : {
                "field" : "suggest",
                "size": 10,
                "contexts": {
                    "category_context": [ "java", "senior" ]
                }
            }
        }
    }
}

Конечно, этот подход требует сложного предварительного анализа данных индекса и поисковых запросов.

Другим вариантом является присвоение весов названиям должностей во время индексации, но, на мой взгляд, оно не подходит для вашего случая.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...