2017-07-05 5 views
1

Ich habe einen Index mit einem Textfeld.Verwenden von Begriff und Übereinstimmung Abfrage für dasselbe Textfeld?

"state": { 
    "type": "text" 
} 

Angenommen, es gibt zwei Daten.

"state": "vail" 
and 
"state": "eagle vail" 

Für eine meiner Anforderungen,
- Ich brauche einen Begriff Ebene Abfrage zu tun, so dass vail, wenn ich „vail“ eingeben, sollten die Suchergebnisse nur zurückgeben Staaten mit „Vorhang“ und nicht „Adler ".

Aber eine andere Voraussetzung für verschiedene Suche auf dem gleichen Index,
- Ich muss eine Übereinstimmung Abfrage für die Volltextsuche, so dass, wenn ich "Vail" eingeben, sollte "Eagle Vail" auch angezeigt werden.

Also meine Frage ist, wie mache ich sowohl Term-Level-und Volltextsuche in diesem Feld, als für eine Term-Level-Abfrage, würde ich es als "Keyword" -Typ festlegen, so dass es nicht analysiert wird.

Antwort

1

Sie können "Multi-Feld" -Funktion verwenden, um dies zu erreichen. Hier ist eine Abbildung:

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

In diesem Fall wird als statetext Feld wirken (tokenized) während state.rawkeyword (single-token) sein wird. Wenn Sie ein Dokument indizieren, sollten Sie nur state setzen. state.raw wird automatisch erstellt.

+0

Ja, nachdem ich die Dokumentation genauer durchgesehen habe, habe ich sie endlich gefunden. : D. Auch das Schlüsselwort scheint die Groß-/Kleinschreibung zu beachten, daher musste ein Kleinbuchstaben-Analysator verwendet werden. –

+0

Rechts, 'Keyword'-Analyzer speichert Ihren Text ohne jegliche Umwandlung. Wenn Sie die Suche ohne Beachtung der Groß- und Kleinschreibung durchführen müssen, verwenden Sie den Kleinbuchstaben-Analysator – Random

Verwandte Themen