Есть ли фильтр для индексации / поиска по порядковым номерам в качестве их числовых значений c? - PullRequest
2 голосов
/ 08 апреля 2020

Я бы хотел проиндексировать и найти 101-й, 101-й и т. Д. c, например 101, 102 и т. Д. c. Есть ли в ElasticSearch фильтр, который это делает?

1 Ответ

1 голос
/ 09 апреля 2020

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