2015-05-27 17 views
7

Sto provando a filtrare i documenti usando il filtro termini. Non sono sicuro di come introdurre i caratteri jolly nel filtro. Ho provato qualcosa di simile:Domanda elastica DSL: caratteri jolly in termini di filtro?

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

Ma ho SearchParseException con questo. Non c'è modo di usare il jolly all'interno del framework dei filtri?

+1

si esegue una query di ricerca si presenta come prefisso. U può usare ngram per questo – demon101

risposta

9

Il filtro terms non supporta i caratteri jolly, tuttavia le query non funzionano. Prova questa ricerca invece

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

Oppure, se è assolutamente necessario utilizzare i filtri, si può provare il filtro regexp, troppo:

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

regexp funziona con filtro termini? – Mohitt

+2

'regexp' è un filtro a sé stante, diverso dal filtro' terms'. Le query – Val

+0

sono eccezionalmente più lente dei filtri. Credo che invece di termini, dovrei andare per regexp multiple sotto un blocco 'should'. – Mohitt