2017-07-17 3 views
0

Ich habe einen Index mit Feld Titel mit Daten wie folgt.Startswith genaue Wort Übereinstimmung in elasticsearch?

  1. Marmelade Brot
  2. jamun
  3. jamaica Land

Also, wenn Nutzer nach Marmelade, ich will nicht jamun und jamaica Land auch in Suchergebnis kommen . Momentan benutze ich eine Präfix-Abfrage in elasticsearch, aber es gibt mir kein Ergebnis, wie ich es möchte.

{ 
    "query": { 
    "prefix" : { "title" : "jam" } 
    } 
} 

Antwort

0

Sie erhalten sowohl die Ergebnisse als Präfix Abfrage ausgeführt wird tatsächlich eine regexp Abfrage (keyword*) auf dem invertierten Index so sowohl die Ergebnisse übereinstimmen.

Sie können etwas wie folgt tun und term query anstelle der Präfix-Abfrage verwenden, um die exakte Übereinstimmung für das Token-Schlüsselwort zu tun.

PUT exact_index1 
{ 
    "mappings": { 
    "document_type" : { 
     "properties": { 
     "title" : { 
      "type": "text" 
     } 
     } 
    } 
    } 
} 

POST exact_index1/document_type 
{ 
    "title" : "jamun" 
} 

POST exact_index1/_search 
{ 
    "query": { 
    "term": { 
     "title": { 
     "value": "jam" 
     } 
    } 
    } 
} 

this helps

+0

Aber es wird auch Daten wie "Fruchtmarmelade" auch als Antwort holen. Ich möchte Ergebnisse, die mit genauem Wortstau beginnen. –

+0

ja, gut in diesem Fall geht es darum, das relevanteste an der Spitze zu bekommen. "Fruchtmarmelade" sollte laut Begriffsabfrage übereinstimmen, aber die Reihenfolge sollte niedriger als "Marmelade" oder "Marmelade braun" sein. – user3775217

0

Die Fertigstellung suggester bietet Such-as-you-type Funktionalität

PUT - index_name/document_type/_mapping 
{ 
"document_type": { 
    "properties": { 
     "title": { 
      "type": "text" 
     }, 
     "suggest": { 
      "type": "completion", 
      "analyzer": "simple", 
      "search_analyzer": "simple" 
     } 
     } 
    } 
} 

POST - index_name/document_type 
{ 
    "name": "jamun", 
    "suggest": 
    { 
     "input": "jamun" 
    }, 
    "output": "jamun" 
} 

POST - index_name/document_type/_suggest?pretty 

{"type-suggest":{"text":"jam","completion":{"field":"suggest"}}} 
+0

Gibt es eine Möglichkeit, Daten in der folgenden Reihenfolge als "Apple iPhone 6" als "Apple", "Apple iPhone", "Apple iPhone 6" mit Schindel oder etwas zu indizieren? –

+0

@LijoAbraham Sie können Daten in beliebiger Reihenfolge indizieren. Elastische Suchabfrage gibt die Datensuche zurück, während Sie wie folgt tippen [app, appl, apple, apple i, apple iphone, apple iphone 6] –

+0

Ich brauche nur Word Ngrams. nicht "appl" oder "ich" –

Verwandte Themen