2016-05-23 9 views
0

ich habe viel von Feldnamen in elcsearch, zum Beispiel:Wie benutze ich regexp in elasticsearch?

web_logfield_A, web_logfield_B, web_logfield_C :: abc,
apach_logfield_A, apach_logfield_A

wenn ich diese Felder Wert erhalten möchten ( web_logfield_A, web_logfield_B, web_logfield_C :: abc)

kann ich mit Regex Ausdruck für "Feldname" abfragen wie

/web_logfield[A-Za-a_]+/ 

Ich habe versucht zu verwenden .setQuery (QueryBuilders.termQuery ("", ""), aber es ist sieht aus wie das geht nicht? Welche Methode in JAVA API kann das?

+0

ich denke, in diesen Bereichen übereinstimmen sollten Sie 'web_logfield [^,] + ' – rock321987

Antwort

0

Sie sollten versuchen, mit einer query_string Abfrage wie diese

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

wo xyz ist, was Sie versuchen

+0

bist du meine xyz ist Feldname? – stefansaye

+0

Nein, "xyz" ist das, was Sie in allen Feldern suchen, deren Name mit '' web_logfield _ \ * "' übereinstimmt. – Val

+0

Fehler erhalten, Ausnahme im Thread "main" Fehler beim Ausführen von phase [dfs], alle Shards fehlgeschlagen; shardFailures – stefansaye

0

In Regex, "+" bedeutet, dass es ein Zeichen zu entsprechen, so dass Ihre Regex nicht passen kann "web_logfield_C :: abc", ich denke, Sie können "web_logfield_ [A-Za-Z] + *" verwenden, die vor einem oder mehreren Zeichen entsprechen kann „+“

+0

welche Methode in JAVA API kann das tun? – stefansaye

+1

Beispiele für das Ausführen regulärer Ausdrücke mit Java finden Sie in [Java - Regular Expressions-Lernprogramm] (http://www.tutorialspoint.com/java/java_regular_expressions.htm). – ishmaelMakitla

+1

Willkommen bei StackOverflow und vielen Dank für die Unterstützung von Mitgliedern der Community. Ihre Antwort enthält ein gewisses Verständnis für reguläre Ausdrücke. Dies ist nützlich. Da die Frage jedoch speziell die Java-API/-Methode kennen sollte, sollten Sie Ihre Antwort aktualisieren, um diesen Aspekt der Frage zu behandeln. Sehen Sie sich auch einige Tipps an (wie Sie Ihre Antworten großartig gestalten können) (http://stackoverflow.com/help/how-to-answer). – ishmaelMakitla

0

verwenden Muster regex zu schreiben und verwenden Matcher die Zeichenfolge übereinstimmen.

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