2016-04-01 13 views
0

Ich versuche, Wildcard-Abfragen über das _all-Feld durchzuführen. Ein Beispiel Abfrage könnte sein:Wildcard Abfrage über _all Feld auf Elasticsearch

GET index/type/_search 
{ 
    "from" : 0, 
    "size" : 1000, 
    "query" : { 
    "bool" : { 
     "must" : { 
     "wildcard" : { 
      "_all" : "*tito*" 
     } 
     } 
    } 
    } 
} 

Die Sache ist die, dass eine Wildcard-Abfrage muss die _all Feld not_analyzed zu verwenden, da sonst die Abfrage wird nicht funktionieren. Weitere Informationen finden Sie unter ES documentation.

Ich versuchte, die mappings over the _all field mit dieser Anfrage zu setzen:

PUT index 
{ 
    "mappings": { 
     "type": { 
      "_all" : { 
       "enabled" : true, 
       "index_analyzer": "not_analyzed", 
       "search_analyzer": "not_analyzed" 
      }, 
      "_timestamp": { 
       "enabled": "true" 
      }, 
      "properties": { 
       "someProp": { 
        "type": "date" 
       } 
      } 
     } 
    } 
} 

Aber ich bin immer der Fehler Analysator [not_analyzed] nicht für das Feld [_all] gefunden.

Ich möchte wissen, was ich falsch mache und ob es eine andere (bessere) Möglichkeit gibt, diese Art von Abfragen durchzuführen.

Thanks.-

Antwort

1

Haben Sie versucht, zu entfernen:

"search_analyzer": "not_analyzed" 

Außerdem frage ich mich, wie gut eine Wildcard für alle Eigenschaften skaliert. Haben Sie sich mit NGrams befasst? Siehe die Dokumentation here.

+0

Ich habe versucht, NGrams und funktioniert viel besser. Das Problem mit NGrams ist, dass viel Speicherplatz belegt wird. Kennst du irgendeine Lösung dafür? –

+0

Ja, NGrams benötigen viel Speicherplatz (und mehr CPU). Sie können mit den Einstellungen für min_gram und max_gram experimentieren. In Anbetracht der Art und Weise, in der die Ngramme gespeichert werden, wird durch die Einstellung zu niedrig oder zu hoch Speicherplatz belegt. In einigen Fällen verbrauchen [edgeNGrams] (https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html) möglicherweise weniger Ressourcen, aber verankert das Ngram am Anfang des Zeichen. – scottjustin5000

1

Wahrscheinlich Sie Option "index": "not_analyzed" Index-Attribut für ein String-Feld, _all ist ein String-Feld bestimmt, ob das Feld analysiert werden soll oder nicht geben wollten.

"search_analyzer" ist festzulegen, welcher Analysator für die vom Benutzer eingegebene Abfrage verwendet werden soll. Dies ist gültig, wenn das Indexattribut auf analysiert gesetzt ist. "index_analyzer" ist festzulegen, welcher Analysator für Dokumente verwendet werden soll. Dies ist wiederum gültig, wenn das Indexattribut auf Analysiert gesetzt ist.

Verwandte Themen