Я просмотрел все статьи и сообщения о выполнении запросов с точным соответствием и без учета регистра, но после реализации они не выполняют то, что я ищу.
Прежде чем пометить этот вопрос как повторяющийся, прочтите сообщение целиком.
Учитывая имя пользователя, я хочу запросить мою базу данных Elasticsearch, чтобы вернуть только документ, который точно соответствует имени пользователя, но также нечувствителен к регистру.
Я попытался указать анализатор lowercase
для своего свойства username
и использовать запрос match
для реализации этого поведения. Хотя это решает проблему нечувствительного к регистру сопоставления, оно не дает точного сопоставления.
Я рассмотрел возможность использования нормализатора lowercase
, но это сделало бы все мои имена пользователей строчными перед индексацией, поэтому, когда я объединяю имена пользователей, они возвращались бы в строчной форме, а это не то, что я хочу. Мне нужно сохранить исходный регистр каждой буквы в имени пользователя.
Я хочу следующее поведение:
Вставка пользователей
POST {elastic}/users/_doc
{
"email": "[email protected]",
"username": "UsErNaMe",
"password": "1234567"
}
Этот документ будет сохранен в индексе под названием users
в точности так, как он есть.
Получение пользователя по имени пользователя
GET {frontend}/user/UsErNaMe
должен вернуться
{
"email": "[email protected]",
"username": "UsErNaMe",
"password": "1234567"
}
а также
GET {frontend}/user/username
должен вернуться
{
"email": "[email protected]",
"username": "UsErNaMe",
"password": "1234567"
}
а также
GET {frontend}/user/USERNAME
должен вернуться
{
"email": "[email protected]",
"username": "UsErNaMe",
"password": "1234567"
}
а также
GET {frontend}/user/UsErNaMe $RaNdoM LeTteRs
не должен ничего возвращать.
Спасибо.