2016-05-23 58 views
0

我有例如很多elcsearch字段名, 的:如何在elasticsearch中使用regexp?

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)

我可以使用正則表達式表達爲 「字段名」 來查詢像

/web_logfield[A-Za-a_]+/ 

我嘗試使用.setQuery(QueryBuilders.termQuery(「」,「」), 但它看起來像不能這樣做? JAVA API中的哪個方法可以做到這一點?

+0

我認爲你應該使用'以匹配web_logfield [^,] +' – rock321987

回答

0

你應該用query_string這樣的查詢

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

嘗試在那裏xyz是你想在這些領域

+0

你是說xyz是字段名? – stefansaye

+0

不是,「xyz」是你在所有名字匹配的字段中搜索到的名字「web_logfield _ \ *」' – Val

+0

得到錯誤,線程「main」中的異常無法執行階段[dfs],所有碎片失敗; shardFailures – stefansaye

0

在正則表達式中,「+」表示有一個字符要匹配,所以你的正則表達式不能匹配「web_logfield_C :: abc」,我想你可以使用「web_logfield_ [A-Za-Z] + *」,它可以匹配前一個或多個字符「+」

+0

JAVA API中的哪個方法可以做到這一點? – stefansaye

+1

有關使用Java執行正則表達式的示例,請查看此[Java - 正則表達式教程](http://www.tutorialspoint.com/java/java_regular_expressions.htm)。 – ishmaelMakitla

+1

歡迎來到StackOverflow並感謝您幫助社區成員。您的答案提供了對正則表達式的一些理解,並且這很有用 - 但是,由於該問題特別想知道Java API /方法,因此請考慮更新答案以解決問題的這一方面。另外看看[如何讓你的答案很棒]的一些提示(http://stackoverflow.com/help/how-to-answer)。 – ishmaelMakitla

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