2017-06-05 5 views
2

Ich habe versucht, herauszufinden, die beste Möglichkeit, tatsächliche Regex-Muster innerhalb einer Elasticsearch 5.4 Abfrage verwenden. Nach der Suche nach dem Standardanalysator und dem Tokenieren jedes Zeichenfolgenfelds begann ich, das nicht analysierte Feld zu verwenden, das in meinen Zuordnungen platziert wurde (standardmäßige .raw-Eigenschaft). Ich habe zwei Varianten derselben Abfrage ausprobiert, beides war nicht erfolgreich.Elasticsearch Bool Abfrage mit Regexp Filter

Abfrage String-Filter:

GET /test-*/_search 
{ 
"query": { 
    "bool": { 
    "must": [ 
     { 
      "query_string":{ 
      "query": "URL.raw:/^(http|https)\\:\/\/.+(wp-content|wp-admin)/" 
      } 
     } 
    ] 
    } 
}, 
"sort": { 
    "@timestamp": { 
    "order": "desc" 
    } 
} 
} 

REGEXP FILTER:

GET /test-*/_search 
{ 
"query": { 
    "bool": { 
    "must": [ 
     { 
     "regexp": { 
      "URL.raw":{ 
      "value": "/^(http|https)\\:\/\/.+(wp-content|wp-admin)/" 
      } 
     } 
     } 
    ] 
    } 
}, 
"sort": { 
    "@timestamp": { 
    "order": "desc" 
    } 
} 
} 

Beide scheinen keine Ergebnisse zu erhalten oder Ausnahmen analysieren

{ 
    "error": { 
    "root_cause": [ 
     { 
     "type": "parse_exception", 
     "reason": "parse_exception: Encountered \" \"^\" \"^ \"\" at line 1, column 8.\nWas expecting one of:\n <BAREOPER> ...\n \"(\" ...\n \"*\" ...\n <QUOTED> ...\n <TERM> ...\n <PREFIXTERM> ...\n <WILDTERM> ...\n <REGEXPTERM> ...\n \"[\" ...\n \"{\" ...\n <NUMBER> ...\n " 
     }, 

Hat lucene erfordern spezielle Entkommen oder die schwarze Liste gesetzt Zeichen? Jede Hilfe oder Hinweise würden sehr geschätzt werden. Vielen Dank!

+1

Lucene Regexps sind standardmäßig verankert und '^'/'$' sind dort nicht besonders. Sie brauchen keine '/' Regex-Begrenzer und Sie müssen nicht '/' entkommen. Probiere das 'regexp_filter' mit' "https?: //.*wp- (content | admin). *" ' –

Antwort

2

Lucene Regexps sind standardmäßig verankert und ^/$ sind dort nicht besonders.

Sie brauchen nicht / regex delimiters und Sie müssen nicht / aufgrund davon entgehen.

Verwenden Sie das folgende Muster:

"value": "https?://.*wp-(content|admin).*" 

Bitte beachte, dass ich die Gruppen ein wenig modifiziert, um das Muster linearer und effizienter zu machen.

Einzelheiten:

  • https?:// - String beginnt mit https:// oder http://
  • .* - dann hat keine 0+ Zeichen
  • wp- - eine wp- Teilzeichenfolge
  • (content|admin) - entweder content oder admin Teilzeichenfolge
  • .* - hat dann 0+ Zeichen.
+1

genial! macht total Sinn! Danke für die schnelle Antwort :)) – djmm187

Verwandte Themen