2017-03-10 3 views
1

In Elasticsearch v5.2.2 ich für „Jo *“ mit Wildcard suchen und es wird der Indexwert mit „Joseph“Elasticsearch Reverse-Wildcard-Suche

Aber was, wenn mein Index hat diese Werte auch „Joseph“ entsprechen, "Jo", "Jos", "Jose" und "Josep" und ich wollen die Abfrage rückgängig machen.

Wie kann ich "Jo", "Jos", "Jose" und "Josep" im Index mit der Zeichenfolge "Joseph" als Suchkriterien finden?

+0

Ja, das ist möglich. Haben Sie gerade bestimmte Analysatoreinstellungen in Ihrem Index? Wenn ja, können Sie sie teilen? – Val

+0

haben wir noch nichts besonderes hinzugefügt, wir haben gestern unsere Dokumente mit NEST indexiert. – montewhizdoh

Antwort

1

Das ist möglich, aber Sie müssen einen edgeNGram Suchanalysator in Ihren Indexeinstellungen erstellen.

Erstellen Sie zuerst die Einstellungen wie folgt. Das Feld name wird mit dem Analysator standard indiziert, aber stattdessen mit dem benutzerdefinierten Analysator prefix_search gesucht.

PUT test 
{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "prefix_search": { 
      "type": "custom", 
      "tokenizer": "standard", 
      "filter": [ 
      "lowercase", 
      "prefix" 
      ] 
     } 
     }, 
     "filter": { 
     "prefix": { 
      "type": "edgeNGram", 
      "min_gram": 1, 
      "max_gram": 10 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "doc": { 
     "properties": { 
     "name": { 
      "type": "string", 
      "analyzer": "standard", 
      "search_analyzer": "prefix_search" 
     } 
     } 
    } 
    } 
} 

Dann, wenn Sie ein Dokument wie folgt zu erstellen:

PUT test/doc/1 
{ 
    "name": "Jos" 
} 

Sie es mit einer Abfrage wie diese finden:

POST /test/doc/_search 
{ 
    "query": { 
    "match": { 
     "name": "Joseph" 
    } 
    } 
} 
+0

Tausend Dank, Val! – montewhizdoh

+0

Super, froh, dass es geholfen hat! – Val

+0

Entschuldigung, sollte ich erwähnt haben .... wird es auch funktionieren, wenn ich eine Abfrage mit "aaajoseph" mache? – montewhizdoh