Токенизатор шаблона Elasticsearch для исключения запятых и тегов <br> - PullRequest
0 голосов
/ 26 мая 2020
Поле

element индексируется значениями, разделенными запятыми, например dog,cat,mouse. Я использую этот анализатор, чтобы разделить указанное выше значение на 3 элемента dog, cat и mouse

ES config

"settings": {
    "analysis": {
        "analyzer": {
            "separate_values" : {
                "type": "custom",
                "tokenizer": "separate_values",
                "filter": ["lowercase", "trim"]
            }
        },
        "tokenizer" : {
            "separate_values" : {
                "type" : "pattern",
                "pattern": ","
            }
        },
    }
}

Сопоставление

"element": {
    "type": "keyword",
    "normalizer": "normalizer_1",
    "fields": {
        "separated": {
            "type": "text",
            "analyzer": "separate_values",
            "fielddata": true
        }
    }
}

Это работает нормально, но я мог бы также получить значения вроде dog<br>cat, и я не знаю, как использовать токенизатор шаблона для разделения значений на основе запятой и <br> теги

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Одним из вариантов может быть использование настраиваемого токенизатора и предоставление всех символов для разделения текста.

char_group

Токенизатор char_group разбивает текст на термины всякий раз, когда встречает символ, который находится в определенном наборе. Это в основном полезно в случаях, когда требуется простая настраиваемая токенизация, а накладные расходы на использование токенизатора шаблона недопустимы.

{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_analyzer": {
          "char_filter":  [ "html_strip" ], --> to remove html tags
          "tokenizer": "my_tokenizer"
        }
      },
      "tokenizer": {
        "my_tokenizer": {
          "type": "char_group",
          "tokenize_on_chars": [    --> charcters on which to split text 
            "whitespace",
            ";",
            "-",
            ","
            ]
        }
      }
    }
  }
0 голосов
/ 27 мая 2020

Вы почти у цели, требуется лишь небольшое изменение. используйте токенизатор standard, который уже разбивает текст на , и html_strip, который удаляет br или любые другие HTML теги.

Требуемые настройки анализатора

{
    "settings": {
        "analysis": {
            "analyzer": {
                "separate_values": {
                    "type": "custom",
                    "tokenizer": "standard", --> note this
                     "char_filter": [
                        "html_strip" --> note this
                    ],
                    "filter": [
                        "lowercase",
                        "trim"
                    ]
                }
            }
        }
    }
}

Создано жетоны

{
    "text": "dog<br>cat, mouse",
    "analyzer": "separate_values"
}

{
    "tokens": [
        {
            "token": "dog",
            "start_offset": 0,
            "end_offset": 3,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "cat",
            "start_offset": 7,
            "end_offset": 10,
            "type": "<ALPHANUM>",
            "position": 1
        },
        {
            "token": "mouse",
            "start_offset": 12,
            "end_offset": 17,
            "type": "<ALPHANUM>",
            "position": 2
        }
    ]
}
...