Пользовательский анализатор Elasticsearch с двумя выходными токенами

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

E.g.

Input -> B.tech in
Output Tokens ->
- btechin
- b.tech in

Я могу удалить не буквенно-цифровой символ, но как сохранить исходный в списке выходных токенов. Ниже приведен пользовательский анализатор, который я создал.

       "alphanumericStringAnalyzer": {
            "filter": [
                "lowercase",
                "minLength_filter"],
            "char_filter": [
                "specialCharactersFilter"
            ],
            "type": "custom",
            "tokenizer": "keyword"
        }

      "char_filter": {
        "specialCharactersFilter": {
            "pattern": "[^A-Za-z0-9]",
            "type": "pattern_replace",
            "replacement": ""
        }
      },

Этот анализатор генерирует один токен "btechin" для ввода "B.tech in", но мне также нужен оригинальный токен в списке токенов "B.tech in"

Спасибо!


person pankaj    schedule 21.05.2019    source источник
comment
Я думаю, что это невозможно, вы можете создать другое поле и скопировать в него значение этого поля и передать его токенизатору ключевых слов? также это поможет, почему вам нужна эта функциональность   -  person user156327    schedule 21.05.2019


Ответы (1)


Вы можете использовать разделитель токена слова, как описано в этом документация

Вот пример конфигурации разделителя слов:

POST _analyze
{
  "text": "B.tech in",
  "tokenizer": "keyword",
  "filter": [
    "lowercase",
    {
      "type": "word_delimiter",
      "catenate_all": true,
      "preserve_original": true,
      "generate_word_parts": false
    }
  ]
}

полученные результаты :

{
  "tokens": [
    {
      "token": "b.tech in",
      "start_offset": 0,
      "end_offset": 9,
      "type": "word",
      "position": 0
    },
    {
      "token": "btechin",
      "start_offset": 0,
      "end_offset": 9,
      "type": "word",
      "position": 0
    }
  ]
}

Я надеюсь, что он будет соответствовать вашим требованиям!

person Pierre Mallet    schedule 21.05.2019
comment
Отлично, я не знал, что мы можем сохранить исходный текст, проголосовал за него. - person user156327; 21.05.2019