2017-02-17 3 views
0

Ich bin Speichern von Dokumenten in einer Lucene Beispiel die folgende Art und Weise:Warum Lucene Index ist so groß?

Document doc = new Document(); 
doc.add(new StringField("title", processor.title, Field.Store.YES)); 
doc.add(new StringField("annotation", processor.annotation, Field.Store.YES)); 
doc.add(new TextField("text", processor.text, Field.Store.NO)); 
w.addDocument(doc); 

Ich brauche Volltext nicht in Index gespeichert werden, das einzige, was ich brauche, ist in der Lage sein, sucht auf Dokumente auszuführen.

Das Problem ist, dass ich einen Index bin immer fast die gleiche Größe wie die Größe des ursprünglichen Satzes von Dokumenten mit. Es erscheint mir ziemlich merkwürdig, da es nur Wortfrequenzen speichern sollte. Warum passiert es?

+1

Könnten Sie einige Beispieldokumente hinzufügen, damit wir sehen können, wie viele Felder es im Originaldokument usw. gibt? Auch einige Zahlen wären nett: wie viele Dokumente, wie groß sind die Felder, wie groß sind die Dokumente und der Index? –

+0

@DominikSandjaja Dokumente haben drei Felder, die Sie in der Frage sehen können. Die Größe des Textes, der nicht im Index gespeichert wird, ist ~ 100 K einfacher englischer Text. –

+0

Können Sie bitte angeben, wie der IndexWriter und IndexWriterConfig erstellt wird? –

Antwort

1

Der Analysator (Tokenizer und Filter) sollte mit Ihrem Text übereinstimmen. Für Englisch sollte der StandardAnalyzer ein guter Anfang sein.

Analyzer analyzer = new StandardAnalyzer(Version.LATEST); 
Directory index = FSDirectory.open(new File("index")); 
IndexWriterConfig config = new IndexWriterConfig(Version.LATEST, analyzer); 
IndexWriter writer = new IndexWriter(index, config); 
2

Es scheint ziemlich seltsam für mich, wie es sollte nur speichern Wort Frequenzen.

Ich denke, Sie missverstehen, was gespeichert ist und wie es gespeichert ist. Die Lucene documentation für die Indexdateiformate erklärt im Detail. Zitiert aus dem Abschnitt Übersicht:

Jedes Segment Index unterhält die folgenden:

  • Feldnamen. Dies enthält den Satz von Feldnamen, die im Index verwendet werden.

  • gespeicherten Feldwerte. Dies enthält für jedes Dokument eine Liste von Attribut-Wert-Paaren, wobei die Attribute Feldnamen sind. Diese sind , die verwendet werden, um zusätzliche Informationen über das Dokument zu speichern, z. B. Titel, URL oder eine Kennung für den Zugriff auf eine Datenbank. Die Menge der gespeicherten Felder ist das, was für jeden Treffer bei der Suche zurückgegeben wird. Dies wird mit der Dokumentennummer eingegeben.

  • Begriff Wörterbuch. Ein Wörterbuch, das alle Begriffe enthält, die in allen indizierten Feldern aller Dokumente verwendet werden. Das Wörterbuch enthält auch die Anzahl der Dokumente, die den Begriff enthalten, und die Zeiger zu den Häufigkeits- und Näherungsdaten des Begriffs.

  • Begriff Frequenzdaten. Für jeden Begriff im Wörterbuch die Nummern aller Dokumente, die diesen Begriff enthalten, und die Häufigkeit des Ausdrucks in diesem Dokument, wenn omitTTf falsch ist.

  • Begriff Proximity Daten. Für jeden Begriff im Wörterbuch die Positionen, in denen der Begriff in jedem Dokument vorkommt. Beachten Sie, dass nicht vorhanden ist, wenn alle Felder in allen Dokumenten omitTf auf true festlegen.

  • Normalisierungsfaktoren. Für jedes Feld in jedem Dokument wird ein Wert gespeichert, der mit der Punktzahl für Treffer in diesem Feld multipliziert wird.

  • Begriff Vektoren. Für jedes Feld in jedem Dokument kann der Ausdruck Vektor (manchmal Dokumentvektor genannt) gespeichert werden. Ein Termvektor besteht aus Termtext und Termhäufigkeit. Um Termvektoren zu Ihrem Index hinzuzufügen, siehe die Feldkonstruktoren

  • Gelöschte Dokumente.Eine optionale Datei, die angibt, welche Dokumente gelöscht werden.

Einige der oben genannten sind optional und wird wahrscheinlich in Ihre Indizes nicht vorhanden sein. Ein minimaler Index wird jedoch die "Feldnamen", "gespeicherte Feldwerte", "Termwörterbuch" und "Termhäufigkeitsdaten" haben.

Einige dieser Datenstrukturen skalieren entsprechend der Anzahl der einzelnen Wörter in Ihrem Korpus. Andere skalieren entsprechend der Anzahl der Dokumente oder der Anzahl der eindeutigen Wörter pro Dokument.

Wenn Sie einen Index mit einem einzelnen (relativ) kleinen Dokument ausfüllen, funktionieren einige der Skalierungsfaktoren gegen Sie.

Schließlich werden die physischen Darstellungen der Indexsegmente entworfen und optimiert in erster Linie für die schnelle Suche im Vergleich zu reduziertem Speicherplatz. Das wird die "Informationsdichte" ... und den in der Praxis genutzten Speicherplatz beeinflussen.