2017-05-11 3 views
0

erwartet Angenommen, wir haben Daten: -quey_string Suche funktioniert nicht wie

{ "_id" : "1","name" : "Doeman John"} 
{"_id" : "2","name" : "John"} 

Abfrage verwendet: -

{ 

    "query": { 
    "query_string": { 
     "fields" : ["name"] , 
     "query": "John" 
    } 
    } 
} 

Tatsächliches Ergebnis: -

{ "_id" : "1","name" : "Doeman John"} 
{"_id" : "2","name" : "John"} 

Erwartetes Ergebnis: -

{"_id" : "2","name" : "John"} 

I Standard Analyzer verwenden. Könnte ich meine expected result erreichen, ohne irgendeine Analyzer-Einstellung zu ändern?

+0

, werden Sie nicht in der Lage sein, dies zu erreichen, ohne Änderung' analyzer' Einstellung. Sie können 'multifield 'verwenden, wenn Sie die analysierte Version ebenfalls behalten möchten. – Richa

+0

Haben Sie Ihren letzten Punkt nicht erhalten "Sie können ein Mehrfeld verwenden, wenn Sie auch die analysierte Version behalten wollen"? –

+0

Das bedeutet, dass Sie zwei Felder für name erstellen können. Einer hat Einstellungen "analysiert" und andere haben "nicht analysiert". In Ihrem Fall suchen Sie nach nicht analysierter Version. – Richa

Antwort

1

Sie können dies nicht erreichen, ohne die Einstellungen analyzer zu ändern. Wenn Sie immer noch Standard Analyzer verwenden möchten, können Sie Ihr Feld multifield machen.

{ 
"mappings": { 
"my_type": { 
    "properties": { 
    "name": { 
     "type": "text", 
     "fields": { 
     "raw": { 
      "type": "keyword" 
      } 
     } 
     } 
    } 
    } 
} 
} 

und dann Abfrage auf der not_analyzed Version laufen.

{ 
    "query": { 
    "term": { 
    "name.raw": { 
     "value": "John" 
     } 
    } 
    } 
    } 

Dies wird Ergebnisse gemäß Ihrer Anforderung abrufen. Keine

`