2016-08-02 8 views
1

In meiner indizierten Daten verwenden, ich einige Dokumente habe, die Werte wie diese haben -Wie suchen " .... " regexp in Elasticsearch

„ausschließen y: \ dkj .... \ sdfisd \ sdfsdf \ asdfai "

Meine Anforderung ist es, alle Dokumente mit solchen Einträgen basierend auf" \ .... \ "zu durchsuchen. Deshalb benutze ich "regexp". Zeit unter regulären Ausdruck dafür verwendet wird, habe ich aber nicht für mich gearbeitet -

  1. "* \\ (\ \ \ \....) \\ *."
  2. "*? [\.] {4}. *"
  3. "* \\ [\.] {4} \\. *"

Unten ist der Teil meiner Abfrage, die ich bin Feuern nach elasticsearch.

 "bool" : { 
      "must" : [ { 
      "query_string" : { 
       "query" : "\"DC2\"", 
       "default_field" : "COLLECTOR_NAME" 
      } 
      }, { 
      "regexp" : { 
       "RAW_EVENT_DATA" : { 
       "value" : ".*?[\\.]{4}.*", 
       "flags_value" : 0 
       } 
      } 
      } ] 
     } 

Bitte geben Sie einige Vorschläge.

+0

Welcher Analysator wird für die Felder verwendet, in denen Sie suchen. Wenn es ein Standard ist, werden wahrscheinlich keine Backslashes und Punkte indiziert und Sie werden nichts finden. – Harald

Antwort

0

Normalerweise ist es im Zusammenhang mit Analysator wir Typen mit folgenden Mapping erstellen lassen

{ 
    "my_index": { 
    "mappings": { 
     "test": { 
     "properties": { 
      "title": { 
      "type": "string" 
      }, 
      "title_raw": { 
      "type": "string", 
      "index": "not_analyzed" 
      } 
     } 
     } 
    } 
    } 
} 

neues Dokument hinzufügen

POST my_index/test/1 
{ 
    "title":"exclude y:\\dkj....\\sdfisd\\sdfsdf\\asdfai", 
    "title_raw":"exclude y:\\dkj....\\sdfisd\\sdfsdf\\asdfai" 
} 

Jetzt

POST my_index/test/_search 
{ 
    "query": { 
    "regexp" : { 
       "title" : { 
       "value" : ".*?[\\.]{4}.*", 
       "flags_value" : 0 
       } 
    } 
} 

kehrt leer Ergebnis

es sucht

Aber nicht analysiert Feld arbeitet perfekt mit regexp

POST my_index/test/_search 
{ 
    "query": { 
    "regexp" : { 
       "title_raw" : { 
       "value" : ".*?[\\.]{4}.*", 
       "flags_value" : 0 
       } 
    } 
} 

Sie documentation überprüfen können eine Vorstellung zu bekommen, warum es passiert ist. Da Sie einen Standard-Analysator verwenden, geht ein Teil der Informationen auf der Indexierungsstufe verloren und ist während der Suche nicht verfügbar.