2016-05-28 24 views
0

Zum Beispiel speichere ich Benutzerpässe in Elasticsearch. Sie werden als fortlaufende Buchstaben und Ziffern des folgenden Formats gespeichert: AADDDDDDD. 2 Alphabet und dann 7 Ziffern.Wie führt man eine maskierte Abfrage in Elasticsearch durch?

Der Benutzer interessiert sich für die Suche, wo er spezifische Werte für bestimmte Positionen angeben kann. Ich möchte zum Beispiel alle Passnummern suchen, die am Anfang "A", an dritter Stelle "7" und an letzter Stelle "0" haben. Etwas wie dieses:

A-7----0 

Wie man eine leistungsfähige Abfrage für dieses erzeugt? Muss ich einen benutzerdefinierten Analysator dafür erstellen?

Bisher habe ich Leerzeichen zwischen Zeichen eingefügt und dann nach Indexposition gesucht, scheint mir eine kostspielige Operation zu sein.

Antwort

1

Wie viel effiziente Abfrage benötigen Sie? Wenn Ihre Daten nicht sehr groß sind, können Sie versuchen, regexp Abfrage https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-regexp-query.html

Andere Vorschlag wird Dokument mit Array von Symbolen und ihren Orten verwenden. Ex.

{ 
     'code' : [ 
      {'pos':1, 'symbol':A},{'pos':2, 'symbol':B}, ... 
     ] 
    } 

dann können Sie einen Bool Filter verwenden und effizienter Filter Cache

+0

Es gibt gute Anzahl der Dokumente/Datensätze verwenden. Aber jede Saite wird klein sein. Wie weniger als 16 Zeichen. –

+0

Dann schlage ich vor, zweite Lösung zu versuchen. Es sollte ziemlich gut funktionieren. – dpa

+0

Könntest du bitte ein wenig auf den 2. Weg gehen? Welche Art von Suche ist das? Sind diese Begriffe Filter? Ich konnte nichts finden, was mit 'pos' und 'symbol' zu tun hat. –