2015-05-27 31 views
7

Próbuję filtrować dokumenty za pomocą filtru pojęć. Nie wiem, jak wprowadzić symbole wieloznaczne w filtrze. Próbowałem coś takiego:Elastyczne zapytanie DSL: Symbole wieloznaczne w kategoriach filtr?

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

Ale dostaję za to SearchParseException. Czy nie ma możliwości użycia symbolu wieloznacznego w strukturze filtru?

+1

kwerendy wygląda poszukiwaniu prefiksu. U można użyć do niego ngram – demon101

Odpowiedz

9

Filtr terms nie obsługuje znaków wieloznacznych, ale zapytania. Spróbuj tego zapytania zamiast

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

A jeśli koniecznie musisz korzystać z filtrów, można spróbować filtr regexp też:

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

Czy regexp działa z filtrem pojęć? – Mohitt

+2

'regexp' jest samodzielnym filtrem, różnym od filtru' terms'. – Val

+0

zapytania są wyjątkowo wolniejsze niż filtry. Zgaduję, że zamiast terminów powinienem wybrać wielokrotne wyrażenie regularne w jednym bloku "powinien". – Mohitt