Ich verwende Lucene, um eine kleine Anzahl großer Dokumente zu indizieren und zu durchsuchen. Mit der Demo von der Lucene-Seite habe ich die Dokumente indiziert und kann sie durchsuchen. Das Suchergebnis ist jedoch nicht besonders nützlich, da es auf die Datei des Dokuments zeigt. Bei sehr großen Dokumenten ist dies nicht besonders nützlich.Kann Lucene mehrere Suchergebnisse aus einer einzelnen indizierten Datei zurückgeben?
Ich frage mich, ob Lucene diese sehr großen Dokumente indizieren und eine Abstraktion über sie erstellen kann, die viel feinkörnigere Ergebnisse liefert.
Ein Beispiel könnte besser erklären, was ich meine. Betrachten Sie ein sehr großes Buch, wie die Bibel. Eine Datei enthält den gesamten Text der Bibel, also würde bei der Demo das Ergebnis der Suche nach "Damaskus" auf die Datei zeigen. Was ich tun möchte, ist das große Dokument beizubehalten, aber Suchen würden Ergebnisse zurückgeben, die auf ein Buch, ein Kapitel oder sogar so genau wie ein Vers verweisen. So könnte eine Suche nach "Damaskus" (unter anderem) Buch 23, Kapitel 7, Vers 8 zurückgeben.
Ist dies möglich (und Best Practice in Lucene Verwendung), oder sollte ich stattdessen versuchen, das große Dokument in viele kleine Dateien zum Indexieren?
Wenn es einen Unterschied macht, verwende ich Java Lucene 2.9.0 und indexiere HTML-Dateien mit einer Größe von ca. 1MB - 4MB. Was in Bezug auf die Dateigröße nicht groß ist, aber es ist groß, relativ zu einer Person, die es liest.
Ich glaube nicht, dass ich das so gut erklärt habe, wie ich konnte. Hier ein anderes Beispiel.
Sagen wir, ich nehme meine große HTML-Datei, und (aus Gründen des Willens) erscheint der Suchbegriff 'Damaskus' dreimal. Einmal auf der Linie 100 innerhalb eines Tags <div>
, auf der Linie 2000 innerhalb eines Tags <p>
und auf der Linie 5000 innerhalb eines Tags <h1>
. Ist es möglich, mit Lucene zu indizieren, so dass es 3 Ergebnisse gibt und sie auf das spezifische Element zeigen können, in dem sich der Begriff befand?
Ich glaube nicht, dass ich ein anderes Dokument Ergebnis für den Begriff bereitstellen möchte. Wenn also der Begriff "Damaskus" zweimal in einem spezifischen <div>
erscheint, würde es nur eine Übereinstimmung geben.
Es scheint aus einem Kommentar von Kragen, was ich tun möchte, ist das HTML analysieren, wenn Lucene die Indexierungsphase durchläuft. Dann kann ich den Chunk bestimmen, den ich als ein Dokument betrachten möchte, von dem, was vom Parser eingelesen wird. Wenn ich also ein div mit einer bestimmten Klasse sehe, kann ich ein neues Lucene-Dokument beginnen und es wird als separater Treffer zurückgegeben, wenn nach einem Wort innerhalb des div-Inhalts gesucht wird.
Klingt das wie das, was ich tun möchte, und ist es möglich?
In Ihrem Beispiel kann ich Buch B als eine einzige Datei, in meinem Fall eine HTML-Datei, speichern und mehrere Lucene-Dokumente innerhalb dieser Datei erstellen, so dass alle Ergebnisse der einzelnen Datei dem Benutzer als diskret gemeldet werden können Treffer? Ist es möglich, nach Kapiteln zu indizieren, wenn die Kapitel in der gleichen * Datei * liegen? Danke für Ihre Antwort :) – Grundlefleck
Sie können nach Kapiteln indizieren, indem Sie Lucene nur eine Teilmenge dieser Datei angeben, wenn Sie indexieren - dies ergibt 1 Treffer pro passendem Kapitel. Wenn Sie dem Benutzer einen Treffer pro diskreter Übereinstimmung präsentieren möchten, müssen Sie alle Vorkommen für jedes übereinstimmende Dokument durchgehen. Es gibt keine Möglichkeit, ein Buch in genügend Lucene-Dokumente aufzuteilen, sodass jeder Treffer garantiert ist entsprechen genau 1 Vorkommen dieses Wortes/Satzes. – Justin