Пользовательские разделители Elasticsearch для стандартного анализатора - PullRequest
1 голос
/ 26 мая 2020

Можно предоставить настраиваемый список разделителей для анализатора standard?

В моем приложении есть раскрывающийся список элементов, где я могу выбрать dog,cat,mouse и использовать это значение в качестве фильтра для поиска. Я хочу иметь возможность выбирать собаку, кошку или мышь в качестве значений фильтра. Обратите внимание, что запятая - не единственный разделитель для этого поля элемента. Я также мог бы иметь dog&cat или dog<br>cat или dog;cat;mouse

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

"mappings": {
    "properties": {
        "element": {
            "type": "text",
        }
        ................
    }
}

1 Ответ

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

Вы можете использовать char_filter , который может заменить определенный символ на какой-то другой, elasticsearch уже прерывается на , &, а для других (которые не являются разделителями) вы можете определить их в char_filter.

Вы также можете использовать API Analyze, как показано ниже, чтобы увидеть, правильно ли char_filter заменяет ваш разделитель.

Поскольку <br> - это код HTML, стандартный анализатор будет создать для него токен, вы можете использовать html_strip char_filter, как показано ниже:

{
  "tokenizer" : "standard",
  "filter" : ["lowercase"],
  "char_filter" : ["html_strip"],
  "text" : "dog<br>cat"
}


{
    "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
        }
    ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...