Вы можете просто использовать pattern_replace char filter для создания токенов, таких как 101
, 102
из текста 101st
, 101nd
или 102
.
Я создал специальный анализатор, который удалил текст и сохранил только номер, чтобы при поиске 100
, 102
10
совпадал токен в инвертированном индексе и приходил в результате поиска.
Рабочий пример
Определение индекса для пользовательского анализатора с использованием pattern_replace.
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"char_filter": [
"my_char_filter"
],
"filter": [
"lowercase"
]
}
},
"char_filter": {
"my_char_filter": {
"type": "pattern_replace",
"pattern": "[a-z]+", --> note this
"replacement": ""
}
}
}
}
}
проверка этого пользовательского анализатора с использованием API анализа,
POST /{your-index-name}/_analyze
{
"analyzer": "my_analyzer",
"text": "101nd"
}
{
"tokens": [
{
"token": "101",
"start_offset": 0,
"end_offset": 5,
"type": "<NUM>",
"position": 0
}
]
}
Другой образец
POST / {your-index-name} / _ analysis
{
"analyzer": "my_analyzer",
"text": "102st"
}
{
"tokens": [
{
"token": "102",
"start_offset": 0,
"end_offset": 5,
"type": "<NUM>",
"position": 0
}
]
}