Какой анализатор времени автозаполнения я должен использовать для имен пользователей без пробелов? - PullRequest
0 голосов
/ 17 апреля 2019

Я относительный неофит, когда дело доходит до использования ElasticSearch.

В настоящее время я пытаюсь настроить функцию автозаполнения для поиска имен пользователей в нашем приложении, но я столкнулся с проблемойс предложением завершения не дает мне ожидаемых результатов.Вот как я отобразил свойства изначально.

        'properties' : {  
          'username' : {  
            'type' : 'keyword',  
            'fields' : {  
              'text' : {  
                'type' : 'text'  
              },  
              'suggest' : {  
                'type' : 'completion'  
              }  
            }  
          }
        }

Имена пользователей будут ограничены только заглавными буквенно-цифровыми символами.(0-9, AZ, без пробелов)

Проблема, с которой я столкнулся, заключалась в том, что точное совпадение TIM взвешивалось так же, как 3TIM, из-за используемого по умолчанию анализатора simple.Но, глядя на стандартный анализатор, по крайней мере в соответствии с этот выглядит так, будто только слова между пробелами являются токенизированными.

Можно ли ожидать моего предполагаемого поведения, указав стандартный токенизатор в имени пользователя.предложить поле?Или я пытаюсь сделать это совершенно неправильно, и вместо этого мне следует использовать совершенно другой анализатор и edge_ngrams?

1 Ответ

0 голосов
/ 17 апреля 2019

При использовании типа поля completion обычно вам не нужно использовать какие-либо ребра-нграммы, это то, что поле completion делает внутренне.

Однако, вы правы, анализатор simple, который используется по умолчанию для типов completion, отбрасывает все числа, т. Е. Разделяет входные данные, когда встречает символ, который не является буквой. Таким образом, это будет работать, только если ваши данные имеют только [a-zA-Z], что не относится к вашим случаям.

Поскольку ваш вход содержит только одно имя пользователя токена, вы можете использовать анализатор standard. Если бы было несколько токенов, я бы не рекомендовал вам использовать их из-за фильтра токенов стоп-слов, но, поскольку это не тот случай, его можно использовать безопасно.

Если вам когда-либо придется использовать завершение на входе с несколькими токенами, обычно лучше всего создать анализатор custom с токенайзером whitespace или classic и фильтром токенов lowercase, как показано ниже:

    "suggest_analyzer": {
      "type": "custom",
      "tokenizer": "classic",
      "filter": [
        "lowercase"
      ]
    },

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

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