如何在elasticsearch中使用regexp?

时间:2016-05-23 06:48:59

标签: java regex 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 个答案:

答案 0 :(得分:0)

根据具体格式,您可以使用:

web_logfield[^,]+

甚至

web_logfield_[^,]+

即:将web_logfield之后的所有内容添加到逗号。

查看实际操作:https://regex101.com/r/dT4nJ2/1

要处理结果,您可以create an array of the regex matches

答案 1 :(得分:0)

在正则表达式中,“+”表示有一个字符要匹配,所以你的正则表达式不能匹配“web_logfield_C :: abc”,我想你可以使用“web_logfield_ [A-Za-Z] + *”,其中可以在“+”之前匹配一个或多个字符

答案 2 :(得分:0)

使用模式编写正则表达式,并使用匹配器匹配字符串。

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);
}

答案 3 :(得分:0)

您应该尝试query_string这样的查询

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

其中xyz是您要在这些字段中匹配的内容