2013-06-24 12 views
14

Non riesco a capire perché le mie ricerche siano sensibili al maiuscolo/minuscolo. Tutto quello che ho letto dice che ES è insensibile per impostazione predefinita. Ho mappature che specificano l'analizzatore standard per l'indicizzazione e la ricerca, ma sembra che alcune cose sono ancora case sensitive - vale a dire, jolly:L'insensibilità delle maiuscole non funziona

"query": { 
"bool": { 
    "must": [ 
    { 
     "wildcard": { 
     "name": { 
      "value": "Rae*" 
     } 
     } 
    } 
    ] 
} 

Questa fallisce ma "rae *" funziona come voleva. Devo usare il carattere jolly per le ricerche di tipo "inizia con" (presumo).

sto usando nido da un'applicazione .Net e sto specificando gli analizzatori quando ho creare l'indice così:

var settings = new IndexSettings(); 
    settings.NumberOfReplicas = _configuration.Replicas; 
    settings.NumberOfShards = _configuration.Shards; 
    settings.Add("index.refresh_interval", "10s"); 
    settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("keyword", new KeywordAnalyzer())); 
    settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("simple", new SimpleAnalyzer())); 

In questo caso si sta usando il semplice analizzatore ma quello standard ha lo stesso risultato.

La mappatura si presenta così:

name: { 
    type: string 
    analyzer: simple 
    store: yes 
} 

Chiunque ha ottenuto tutte le idee che cosa è sbagliato qui?

Grazie

+1

Con una versione più recente di ES (2.3) è possibile utilizzare Completion Suggester per questo. – myusuf

+0

ho lo stesso problema. anche se provato "query_string" non funziona in ES 5.1, ma ha funzionato in 2.3. !!!! – Telebh

risposta

24

Dal documentation,

"[La query jolly] partite documenti contenenti campi corrispondenti a un'espressione jolly (non analizzati)".

Poiché il termine ricerca non viene analizzato, sarà essenzialmente necessario eseguire l'analisi da soli prima di generare la query di ricerca. In questo caso, ciò significa solo che il termine di ricerca deve essere in minuscolo. In alternativa, è possibile utilizzare query_string:

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "query_string": { 
      "query": "name:Rae*" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

SI SI SI !!! Grazie mille. – Jonesie

Problemi correlati