#java #regex #elasticsearch
#java #регулярное выражение #эластичный поиск
Вопрос:
GET /_search
{
"query": {
"regexp": {
"user.id": {
"value": "k.*y",
"case_insensitive": true,
}
}
}
}
что эквивалентно java api для этого примера (выше запроса) в elastic docs?
Я не могу найти способ добавить case_insensitive.
QueryBuilders.regexpQuery("user.id", "k.*y")
Ответ №1:
AFAIK в Elasticsearch нет Querybuilder, который поддерживает параметр без учета регистра, вам нужно изменить размер вашего поля так, чтобы оно создавало токен в нижнем регистре, а затем запрос соответствия, который использует тот же анализатор для поискового запроса и вводит поисковый запрос в нижнем регистре, таким образом, вы можете добиться поиска без учета регистра в Elasticsearch.
Примечание: Стандарт анализатора по умолчанию использует символы нижнего регистра, в противном случае вы можете использовать фильтр символов нижнего регистра в своем анализаторе и заставить его работать.
РЕДАКТИРОВАТЬ: похоже, что Elasticsearch недавно добавил поддержку caseInsensitive
param, и она была добавлена как часть этого PR, который был объединен 25 августа 2020 года, и похоже, что он поддерживает версии ES, превышающие или равные 7.10.
Комментарии:
1. Но оно есть в прямом запросе json. Итак, его ограничение Java-клиента верно?
2. @MohitSingh вы на какой версии ES?
3. @MohitSingh пожалуйста, посмотрите мое РЕДАКТИРОВАНИЕ, вы правы, оно поддерживается в запросе ES JSON, но в коде оно доступно только из ES 7.10