2016-08-03 13 views
-1

Ich benutze Elasticsearch, um Autosuggestions auf einer Suchleiste zu geben, aber ich möchte, dass es nur den Anfang der Wörter übereinstimmt. Z.B.Elasticsearch - Ergebnisse für Autovervollständigung nur für Anfang der Wörter

doc_name_1 = "black bag" 
doc_name_2 = "abla bag" 

Fall 1. Auf Suchleiste Zeichenfolge part_string = "bla" die Abfrage, die ich zur Zeit bin mit

query_body = {"query": { 
      "match": { 
       "_all": { 
        "query": part_string, 
        "operator": "and", 
        "type": "phrase_prefix" 

       } 
      } 
    }} 

ist diese Abfrage gibt Zugriffe auf doc_name_1 und doc_name_2.

Was ich brauche ist, nur auf doc_name_1 Hit seit doc_name_1 startet nicht auf die gleiche Weise wie die Zeichenfolge abgefragt. Ich versuchte mit "type":"phrase" aber ES geht "nach innen" die Wörter in den Dokumenten. Ist es möglich, dies nur durch Ändern der Abfrage zu tun? oder Einstellungen?

Ich werde meine ES Einstellungen teilen:

{ "analysis":{ 
       "filter":{ 
        "nGram_filter": { 
         "type": "ngram", 
         "min_gram": 1, 
         "max_gram":20, 
         "token_chars": [ 
          "letter", 
          "digit", 
          "punctuation", 
          "symbol" 
         ] 
       }}, 
       "analyzer":{ 
        "nGram_analyzer": { 
         "type": "custom", 
         "tokenizer": "whitespace", 
         "filter":[ 
          "lowercase", 
          "asciifolding", 
          "nGram_filter" 
         ] 
        }, 
        "whitespace_analyzer": { 
         "type":"custom", 
         "tokenizer": "whitespace", 
         "filter": [ 
          "lowercase", 
          "asciifolding" 
         ] 
       }}}} 

Antwort

1

Verwendung edge n-gram anstelle von n-Gramm. Sie zerlegen den Text von allen Stellen des Wortes und füllen den invertierten Index gegen Nachschlagen.

+0

Ich versuche, die Kante N-Gramm zu verwenden, aber sollte ich es in den Einstellungen zusammen mit dem N-Gramm-Analysator oder INSTEAD davon hinzufügen? bekomme diesen Fehler "Analyzer [nGram_analyzer] nicht gefunden für Feld [_all]" –

+0

Sorry, löste das Problem im letzten Kommentar, es hatte mit dem Mapping der Dokumente zu tun. –

+0

Ja, Sie müssen neue Einstellungen hochladen und dann neue Zuordnungen hochladen und alle Ihre Dokumente erneut auf der ES neu indizieren. – user3775217