Вы можете добиться желаемого поведения, настроив собственный анализатор, используя символьный фильтр, который сохраняет символ «%» от удаления.
Проверьте документацию Elasticsearch о конфигурации встроенных анализаторов. , чтобы использовать эту конфигурацию в качестве образца для настройки вашего собственного анализатора (см. Elasticsearch Reference: engli sh analyzer )
Добавьте фильтр символов, который отображает символ процента в другую строку , как показано в следующем фрагменте кода:
PUT my_index
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"my_percent_char_filter"
]
}
},
"char_filter": {
"my_percent_char_filter": {
"type": "mapping",
"mappings": [
"0% => 0_percent",
"1% => 1_percent",
"2% => 2_percent",
"3% => 3_percent",
"4% => 4_percent",
"5% => 5_percent",
"6% => 6_percent",
"7% => 7_percent",
"8% => 8_percent",
"9% => 9_percent"
]
}
}
}
}
}
POST my_index/_analyze
{
"analyzer": "my_analyzer",
"text": "The fee is between 0.93% or 2%"
}
С этим вы можете даже искать определенные c проценты (например, 2%
)!
Альтернативное решение
Если вы просто хотите удалить символ процента, вы можете использовать тот же подход, но просто отобразить символ %
в пустую строку, как показано в следующем фрагменте кода
"char_filter": {
"my_percent_char_removal_filter": {
"type": "mapping",
"mappings": [
"% => "]
}
}
Кстати: этот подход не считается «взломом», это стандартный подход к решению проблемы. Ваша оригинальная строка перед отправкой токенизатору.