2016-04-19 13 views
0

arbeiten ich Elasticsearch ngramngrams ins Elasticsearch nicht

"analysis": { 
    "filter": { 
     "desc_ngram": { 
      "type": "ngram", 
      "min_gram": 3, 
      "max_gram": 8 
     } 
    }, 
    "analyzer": { 
     "index_ngram": { 
      "type": "custom", 
      "tokenizer": "keyword", 
      "filter": [ "desc_ngram", "lowercase" ] 
     }, 
     "search_ngram": { 
      "type": "custom", 
      "tokenizer": "keyword", 
      "filter": "lowercase" 
     } 
    } 
} 

Und ich habe zwei Objekte hier

{ 
    "name": "Shana Calandra", 
    "username": "shacalandra", 
}, 
{ 
    "name": "Shana Launer", 
    "username": "shalauner", 
}, 

Und mit dieser Abfrage

{ 
    query: { 
     match: { 
      _all: "Shana" 
     } 
    } 
} 

Wenn ich mit dieser Abfrage zu suchen , es gibt mir beide Dokumente zurück, aber ich kann hier nicht nach einem Teil des Wortes suchen, zum Beispiel kann ich "Shan" anstelle von "Shana" in q nicht verwenden sehr, weil es nichts zurückgibt.

Vielleicht falsch mein Mapping ist, kann ich nicht verstehen Problem auf Mapping ist oder auf Abfrage

+0

Das Problem besteht wahrscheinlich darin, dass Sie nach dem Feld '_all' suchen und der Standardanalysator für dieses Feld verwendet wird, sofern nicht anders angegeben. Versuchen Sie, speziell auf 'name' zu ​​passen. Funktioniert es? – Val

Antwort

0

Wenn Sie

"mappings": { 
    "test": { 
     "_all": { 
     "index_analyzer": "index_ngram", 
     "search_analyzer": "search_ngram" 
     }, 

für Ihre Zuordnung von _all Feld angeben, dann wird es funktionieren. _all hat seine eigenen Analysatoren und ich vermute, Sie haben die Analysatoren nur für name und username und nicht für _all verwendet.

+0

nicht mit dem Namen oder Benutzernamen – Gor

+0

Ich verstehe nicht, was Sie meinten. –