2016-08-24 1 views
0

Ich arbeite an der Übersetzung einer Splunk-Abfrage zu Elasticsearch DSL. Ich möchte in den Protokollen enthält so etwas wie, wenn eine URL überprüfen:Wie benutzt man die Elasticsearch Regex Abfrage richtig?

"script>" OR "UNION ALL SELECT" 

Fair enough dachte ich, ging zum doc, und:

{ 
    "regexp": { 
    "http.url": "script>" 
    } 
} 

Elasticsearch (2.3) antwortet:

"root_cause": [ { "Grund": "konnte die Suchquelle nicht analysieren. Unbekanntes Suchelement [regexp]", "t yp ": "search_parse_exception", "Linie": 2,

Könnte jemand mich aufklären bitte über diese Art von Fragen?

Antwort

2

Dies ist ein ziemlich einfacher Fehler beim Start mit der Dokumentation. In den Dokumenten zeigen wir im Allgemeinen nur die rohe Abfrage (und ihre Parameter). Abfragen sind entweder zusammengesetzte Abfragen oder Blattabfragen. regexp ist ein Beispiel für eine Blattabfrage.

Das ist jedoch nicht genug, um die Abfrage tatsächlich zu senden. Sie sind für jeden Abfrage an einen einfachen Wrapper Teil des DSL fehlen:

{ 
    "query": { 
    "regexp": { 
     "http.url": "script>" 
    } 
    } 
} 

Zur Herstellung eine Verbindung Abfrage zu verwenden, der beste Weg ist, um die bool compound query zu verwenden.

Es hat must, must_not, should oder filter und jeder akzeptiert eine Reihe von Abfragen (oder Filter, die nur torlos, zwischenspeicherbar Abfragen sind). should ist der OR-ähnliche Aspekt, aber lesen Sie die Dokumentation, wie es sich verhält, wenn Sie must daneben hinzufügen. Das Wesentliche ist, dass should von selbst ist genau wie ein OR (wie unten gezeigt), aber wenn Sie es mit must kombinieren, dann wird es vollständig optional ohne "minimum_should_match": 1 zu verwenden.

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "term": { 
      "http.url": "script>" 
      } 
     }, 
     { 
      "term": { 
      "http.url": "UNION ALL SELECT" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

Ich bekomme das jetzt. Entschuldigung für die Verwirrung. Diese Abfrage scheint zu funktionieren. Es wäre großartig, wenn Sie mir sagen könnten, wie man OR-Logik auch auf die Abfragen anwenden kann. Ich habe das in meiner Frage jedoch nicht zu deutlich gemacht. – wishi

+0

Dort gehen Sie. Ich habe mir erlaubt, 'regexp' in' term' zu ändern, was ** genaues ** Übereinstimmungsverhalten voraussetzt. – pickypg

Verwandte Themen