2015-05-27 17 views
7

Ich versuche, die Dokumente mit Begriffen Filter zu filtern. Ich bin mir nicht sicher, wie man Wildcards im Filter einführt. Ich habe so etwas versucht:Elastische Abfrage DSL: Wildcards in Begriffen filtern?

"filter":{ 
    "bool":{ 
     "must":{ 
      "terms":{ 
      "wildcard" : { 
       "aircraft":[ 
        "a380*" 
       ] 
      } 
     } 
     } 
    } 
} 

Aber ich bekomme SearchParseException mit diesem. Gibt es keine Möglichkeit, Platzhalter innerhalb des Filter-Frameworks zu verwenden?

+1

Sie Abfrage sieht aus wie Präfixsuche. U kann Ngram für es verwenden – demon101

Antwort

9

Der terms Filter unterstützt keine Platzhalter, Abfragen jedoch. Diese Abfrage statt

{ 
    "query": { 
    "bool": { 
     "must": { 
     "wildcard": { 
      "aircraft": "a380*" 
     } 
     } 
    } 
    } 
} 

Oder wenn Sie absolut Filter verwenden müssen, können Sie den regexp Filter versuchen, auch:

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": { 
      "regexp": { 
       "aircraft": "a380.*" 
      } 
      } 
     } 
     } 
    } 
    } 
} 
+0

Funktioniert Regexp mit Begriffen Filter? – Mohitt

+2

'regexp' ist ein eigener Filter, der sich vom' terms'-Filter unterscheidet. – Val

+0

Abfragen sind außergewöhnlich langsamer als Filter. Ich denke, anstelle von Begriffen sollte ich für mehrere Regexp unter einem "sollte" Block gehen. – Mohitt