2013-06-24 6 views
14

Ich kann nicht herausfinden, warum meine Suchen Groß-und Kleinschreibung beachten. Alles, was ich gelesen habe, sagt, dass ES standardmäßig unempfindlich ist. Ich habe Zuordnungen, die den Standard-Analysator für die Indizierung festlegen und suchen, aber es scheint, wie einige Dinge noch Groß- und Kleinschreibung sind - dh Wildcard:Case Insensitivity funktioniert nicht

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

Dies scheitert aber „rae *“ funktioniert wie gewünscht. Ich brauche Wildcard für 'Starts mit' Typ Suchen (ich vermute).

Ich verwende NEST aus einem .Net-App und bin unter Angabe der Analysatoren, wenn ich den Index so zu erstellen:

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 diesem Fall ist es das einfache Analysegerät unter Verwendung der Standard jedoch hat man das gleiche Ergebnis.

Die Abbildung sieht wie folgt aus:

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

Wer hat irgendwelche Ideen, was ist hier los?

Dank

+1

Mit mehr RecEnd Version von ES (2.3) Sie Completion Suggester dafür verwenden können. – myusuf

+0

Ich habe das gleiche Problem. selbst wenn versucht "query_string" es funktioniert nicht in ES 5.1, aber es funktionierte in 2.3. !!!! – Telebh

Antwort

24

Vom documentation,

"[Die Wildcard-Abfrage] entspricht Dokumente, die (nicht analysiert) Felder passende einen Platzhalter Ausdruck haben".

Da die Suchbegriff nicht analysiert wird, werden Sie im Wesentlichen müssen die Analyse selbst vor der Generierung der Suchabfrage auszuführen. In diesem Fall bedeutet dies nur, dass Ihr Suchbegriff klein geschrieben sein muss. Alternativ können Sie query_string verwenden:

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

JA JA JA !!! Ich danke dir sehr. – Jonesie

Verwandte Themen