эластичное регулярное выражение javaapi без учета регистра

#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