Da invertierte Indizes nach docId geordnet sind, können sie sehr schnell zusammengeführt werden. [Wenn eines der Wörter bei docId 23 und dann bei docId 100001 beginnt, können Sie sofort auch in der ersten Liste auf docId 100001 oder höher vorspulen. ]
Da die typischen Belegüberschneidungen bei fast wenigen Millionen liegen, können sie sehr schnell nach Rang sortiert werden. Ich suchte nach 'Hundekatze' [sehr häufige 2 Wörter], die nur 54 Millionen Treffer zurückgab.
Das Sortieren von 10 Millon zufälligen Ganzzahlen dauerte nur 2,3 Sekunden in meinem Mac mit Single-Thread-Code [1 Million dauerte 206 ms!] Und da wir in der Regel nur die Top 10 auswählen müssen, ist nicht einmal die volle Sortierung erforderlich.
Hier ist der Code, wenn jemand die Geschwindigkeit der Sortierung versuchen und zu faul Code schreiben möchte!
import java.lang.*;
import java.math.*;
import java.util.*;
public class SortTest {
public static void main(String[] args) {
int count = Integer.parseInt(args[0]);
Random random = new Random();
int[] values = new int[count];
int[] bogusValues = new int[100000]; //screw cache
for(int i = 0; i < values.length;++i) {
values[i] = random.nextInt(count);
}
for(int i = 0; i < bogusValues.length;++i) {
bogusValues[i] = random.nextInt(count);
}
long start = System.currentTimeMillis();
System.out.println(start);
Arrays.sort(values);
System.out.println(System.currentTimeMillis());
System.out.println(System.currentTimeMillis()-start);
Arrays.sort(bogusValues);
}
}
Was werden Sie tun, wenn es mehrere Faktoren sind eher zu betrachten als nur Auftreten, wie Position der Wörter relativ nahe zu sein, Titel Vorzugs etc .. Glauben Sie, verschmelzenden von all diesen Dingen könnte immer noch in angemessener Zeit durchgeführt werden. – Boolean
Grob gesagt holen sie Dokumente, die alle Abfragewörter enthalten, in absteigender Reihenfolge des PageRank und wenden die Relevanzformel (eine komplexe Kombination von mehreren hundert oder tausenden dokumenten- und abfrageabhängigen Faktoren) direkt auf jede von ihnen an, während sie verschiedene Bereinigungsheuristiken verwenden . Es stellt sich heraus, dass dies in angemessener Zeit durchgeführt werden kann. Computer sind heutzutage leistungsfähig. – jkff
Vielleicht ist ein größeres Problem, wie diese Listen effizient von der Festplatte in den Speicher geladen werden, aber das ist etwas anderes ... – ren