Trie Felder machen Bereichsabfragen schneller durch precomputing bestimmten Bereich Ergebnisse und Speicherung sie als einzelner Datensatz im Index. Zur besseren Übersicht verwendet mein Beispiel Ganzzahlen in der Basis zehn. Dasselbe Konzept gilt für alle Trie-Typen. Dies beinhaltet Datumsangaben, da ein Datum als Anzahl von Sekunden seit etwa 1970 dargestellt werden kann.
Nehmen wir an, wir indexieren die Nummer 12345678
. Wir können dies in die folgenden Tokens einteilen.
12345678
123456xx
1234xxxx
12xxxxxx
Das Token 12345678
repräsentiert den tatsächlichen ganzzahligen Wert. Die Token mit den Ziffern x
repräsentieren Bereiche.123456xx
repräsentiert den Bereich 12345600
bis 12345699
und stimmt mit allen Dokumenten überein, die ein Token in diesem Bereich enthalten.
Beachten Sie, wie in jedem Token auf der Liste nacheinander x
Ziffern. Dies wird durch den Präzisionsschritt gesteuert. In meinem Beispiel könnte man sagen, dass ich einen Präzisionsschritt von 2 verwendet habe, da ich zwei Ziffern trimme, um jedes zusätzliche Token zu erstellen. Wenn ich einen Präzisionsschritt von 3 verwenden würde, würde ich diese Token bekommen.
12345678
12345xxx
12xxxxxx
Ein Präzisions-Schritt von 4:
12345678
1234xxxx
Ein Präzisions Schritt 1:
12345678
1234567x
123456xx
12345xxx
1234xxxx
123xxxxx
12xxxxxx
1xxxxxxx
Es ist einfach in mehr Token ein kleineren Ergebnisse Präzision Schritt, um zu sehen, wie und erhöht die Größe des Indexes. Es beschleunigt jedoch auch Bereichsabfragen.
Ohne den Trie-Bereich, wenn ich einen Bereich von 1250 bis 1275, Lucene müßten holen 25 Einträge (1250
, 1251
, 1252
, ..., 1275
) und kombiniert die Suchergebnisse abfragen will. Mit einem Trie-Feld (und Präzision Schritt 1), konnten wir mit Abrufen 8 Einträge weg (125x
, 126x
, 1270
, 1271
, 1272
, 1273
, 1274
, 1275
), weil 125x
ist eine vorberechnete Aggregation von 1250
-1259
. Wenn ich einen Präzisionsschritt größer als 1 verwenden würde, würde die Abfrage alle 25 einzelnen Einträge abrufen.
Hinweis: In Wirklichkeit bezieht sich der Präzisionsschritt auf die Anzahl der für jedes Token getrimmten Bits. Wenn Sie Ihre Zahlen hexadezimal schreiben würden, würde ein Präzisionsschritt von 4 eine Hexadezimalziffer für jedes Token trimmen. Ein Präzisionsschritt von 8 würde zwei Hexadezimalziffern abschneiden.
5 Jahre später, immer noch die selbe Situation mit Google, Solr Handbuch, Solr Wiki, etc. Oh, nein, da hat sich etwas geändert: Google zeigt jetzt hier :) – alisa