как использовать regexp в elasticsearch?

у меня есть много имени Поля в elcsearch ,
например :

web_logfield_A, web_logfield_B, web_logfield_C:: abc,

apach_logfield_A, apach_logfield_A

если я хочу получить значение этих полей (
web_logfield_A, web_logfield_B, web_logfield_C:: abc )

могу ли я использовать выражение Regex для «имени поля» для запроса типа

/web_logfield[A-Za-a_]+/

у меня стараюсь использовать .setQuery (QueryBuilders.termQuery(«»,»»),
но, похоже, не может этого сделать ?
какой метод в Java API может это сделать ?

4 ответа

  1. В зависимости от конкретного формата, вы можете использовать это:

    web_logfield[^,]+
    

    или даже

    web_logfield_[^,]+
    

    То есть: получить все после web_logfieldзапятой.

    Смотрите его в действии: https://regex101.com/r/dT4nJ2/1

    Для обработки результатов можно создать массив совпадений регулярных выражений .

  2. В regex»+ «означает,что есть один символ, чтобы соответствовать, так что ваш regex не может соответствовать «web_logfield_C:: abc», я думаю, что вы можете использовать » web_logfield_[a-Za-Z]+*», который может соответствовать один или несколько символов перед «+»

  3. Используйте Pattern для записи regex и используйте Matcher для сопоставления строки.

    Pattern p = Pattern.compile("web_logfield[A-Za-a_]+");
    Matcher m = p.matcher(str);
    while(m.find()){
       String res = m.group();
       System.out.println(res);
    }
    
  4. Попробуйте выполнить такой query_stringзапрос

    .setQuery(QueryBuilders.queryStringQuery("xyz").field("web_logfield_*"))
    

    где xyzто, что вы пытаетесь соответствовать в этих полях