Klasse IndexWriter
An IndexWriter erstellt und verwaltet einen Index.
Erbe
Versammlung: DistributedLucene.Net.dll
Syntax
public class IndexWriter : IDisposable, ITwoPhaseCommit, IIdentifiableSurrogate
Bemerkungen
Das OpenMode Option auf OpenMode bestimmt, ob ein neuer Index erstellt oder ein vorhandener Index geöffnet wird. Beachten Sie, dass Sie einen Index mit öffnen können CREATE auch während Leser den Index verwenden. Die alten Leser durchsuchen weiterhin den „Zeitpunkt“-Snapshot, den sie geöffnet haben, und sehen den neu erstellten Index erst, wenn sie ihn erneut öffnen. Wenn CREATE_OR_APPEND verwendet wird IndexWriter erstellt einen neuen Index, wenn im angegebenen Pfad noch kein Index vorhanden ist, und öffnet andernfalls den vorhandenen Index.
In beiden Fällen werden Dokumente mit hinzugefügt AddDocument(IEnumerable ) und entfernt mit Dokumente löschen(Laufzeit) or Dokumente löschen (Abfrage). Ein Dokument kann mit aktualisiert werden UpdateDocument(Term, IEnumerable ) (wodurch lediglich das gesamte Dokument gelöscht und dann hinzugefügt wird). Wenn Sie mit dem Hinzufügen, Löschen und Aktualisieren von Dokumenten fertig sind, Entsorgen() aufgerufen werden sollte.
Diese Änderungen werden im Speicher zwischengespeichert und regelmäßig in den gelöscht Verzeichnis (während der oben genannten Methodenaufrufe). Ein Flush wird ausgelöst, wenn seit dem letzten Flush genügend Dokumente hinzugefügt wurden. Das Leeren wird entweder durch die RAM-Nutzung der Dokumente ausgelöst (siehe RAMBufferSizeMB) oder die Anzahl der hinzugefügten Dokumente (siehe MaxBufferedDocs). Standardmäßig wird geleert, wenn die RAM-Auslastung erreicht wird DEFAULT_RAM_BUFFER_SIZE_MB MB. Für eine optimale Indizierungsgeschwindigkeit sollten Sie die RAM-Nutzung mit einem großen RAM-Puffer regeln. Darüber hinaus, wenn IndexWriter erreicht die konfigurierte Anzahl gepufferter Löschvorgänge (siehe MaxBufferedDeleteTerms) werden die gelöschten Begriffe und Abfragen gelöscht und auf vorhandene Segmente angewendet. Im Gegensatz zu den anderen Spülmöglichkeiten RAMBufferSizeMB und MaxBufferedDocs, gelöschte Begriffe lösen keine Segmentbereinigung aus. Beachten Sie, dass durch das Leeren nur der interne Pufferzustand verschoben wird IndexWriter in den Index aufgenommen, diese Änderungen sind für sie jedoch nicht sichtbar IndexReader bis entweder Verpflichten() or Entsorgen() wird genannt. Ein Flush kann auch eine oder mehrere Segmentzusammenführungen auslösen, die standardmäßig mit einem Hintergrundthread ausgeführt werden, um die addDocument-Aufrufe nicht zu blockieren (siehe unten zum Ändern der Lucene.Net.Index.IndexWriter.mergeScheduler).
Öffnen eines IndexWriter erstellt eine Sperrdatei für das verwendete Verzeichnis. Versuche, ein anderes zu öffnen IndexWriter im selben Verzeichnis führt zu a LockObtainFailedExceptiondem „Vermischten Geschmack“. Seine LockObtainFailedException wird auch geworfen, wenn an IndexReader im selben Verzeichnis wird zum Löschen von Dokumenten aus dem Index verwendet.
Expert: IndexWriter erlaubt eine optionale IndexDeletionPolicy Implementierung spezifiziert werden. Damit können Sie steuern, wann frühere Commits aus dem Index gelöscht werden. Die Standardrichtlinie lautet KeepOnlyLastCommitDeletionPolicy Dadurch werden alle vorherigen Commits entfernt, sobald ein neuer Commit durchgeführt wird (dies entspricht dem Verhalten vor 2.2). Wenn Sie Ihre eigene Richtlinie erstellen, können Sie frühere „Point-in-Time“-Commits explizit für einige Zeit im Index am Leben erhalten, damit Leser auf das neue Commit aktualisieren können, ohne dass das alte Commit unter ihnen gelöscht wird. Dies ist auf Dateisystemen wie NFS erforderlich, die die Semantik „Beim letzten Schließen löschen“ nicht unterstützen, auf der die „Punkt-in-Zeit“-Suche von Lucene normalerweise basiert.
Expert: IndexWriter ermöglicht es Ihnen, die separat zu ändern Lucene.Net.Index.IndexWriter.mergePolicy und für Lucene.Net.Index.IndexWriter.mergeScheduler. Das Lucene.Net.Index.IndexWriter.mergePolicy wird immer dann aufgerufen, wenn Änderungen an den Segmenten im Index vorgenommen werden. Seine Aufgabe besteht darin, gegebenenfalls auszuwählen, welche Zusammenführungen durchgeführt werden sollen, und a zurückzugeben MergePolicy.MergeSpecification Beschreibung der Zusammenführungen. Die Standardeinstellung ist LogByteSizeMergePolicy. Dann ist die MergeScheduler wird mit den angeforderten Zusammenführungen aufgerufen und entscheidet, wann und wie die Zusammenführungen ausgeführt werden. Die Standardeinstellung ist ConcurrentMergeScheduler.
HINWEIS: wenn du ein triffst
HINWEIS: IndexWriter Instanzen sind vollständig Thread-sicher, was bedeutet, dass mehrere Threads gleichzeitig jede ihrer Methoden aufrufen können. Wenn Ihre Anwendung eine externe Synchronisierung erfordert, sollten Sie dies tun nicht synchronisieren auf dem IndexWriter Dies kann zum Beispiel zu einem Deadlock führen. Verwenden Sie stattdessen Ihre eigenen (nicht von Lucene stammenden) Objekte.
HINWEIS: Wenn du anrufst
Konstruktoren
Name und Vorname | Beschreibung |
---|---|
IndexWriter(Verzeichnis, IndexWriterConfig) | Konstruiert ein neues IndexWriter gemäß den in angegebenen Einstellungen Anmerkungen: Nachdem dieser Writer erstellt wurde, kann die angegebene Konfigurationsinstanz nicht an einen anderen Writer übergeben werden. Wenn Sie dies beabsichtigen, sollten Sie dies tun Klon() es vorher. |
Felder
Name und Vorname | Beschreibung |
---|---|
MAX_TERM_LENGTH | Absolute harte Maximallänge für einen Begriff, in Bytes, einmal als UTF8 kodiert. Wenn vom Analysator ein Begriff eintrifft, der länger als diese Länge ist, wird ein
|
SOURCE | Schlüssel für die Quelle eines Segments im Diagnose. |
SOURCE_ADDINDEXES_READERS | Quelle eines Segments, das aus einem Aufruf von resultiert AddIndexes(IndexReader[]). |
SOURCE_FLUSH | Quelle eines Segments, das aus einem Flush resultiert. |
SOURCE_MERGE | Quelle eines Segments, das aus einer Zusammenführung anderer Segmente resultiert. |
WRITE_LOCK_NAME | Name der Schreibsperre im Index. |
Ferienhäuser
Name und Vorname | Beschreibung |
---|---|
Teilergebnisse zulassen | Auf „false“ setzen, um einen Gesamtfehler zurückzugeben, wenn die Anforderung Teilergebnisse liefern würde. Auf „true“ setzen, was im Falle eines partiellen Clusters Teilergebnisse zulässt. |
Analyzer | Ruft den von diesem Index verwendeten Analysator ab. |
CommitDaten | Gibt die Commit-Benutzerdatenzuordnung zurück, die zuletzt festgeschrieben wurde oder für die festgelegt wurde SetCommitData(IDictionary ). |
Config | Gibt a zurück LiveIndexWriterConfig, mit dem die abgefragt werden kann IndexWriter aktuelle Einstellungen ändern und „Live“-Einstellungen ändern. |
Verzeichnis | Ruft die Verzeichnis von diesem Index verwendet. |
Ist geschlossen | |
KeepFullyDeletedSegments | Nur zum Testen. @lucene.intern |
MaxDoc | Ruft die Gesamtzahl der Dokumente in diesem Index ab, einschließlich der Dokumente, die noch nicht geleert wurden (noch im RAM-Puffer), ohne Löschungen. |
Segmente zusammenführen | Experte: zur Verwendung durch a Zusammenführungsrichtlinie um zu vermeiden, dass Zusammenführungen für Segmente ausgewählt werden, die bereits zusammengeführt werden. Die zurückgegebene Sammlung wird nicht geklont und ist daher nur dann sicher zugänglich, wenn Sie sie gedrückt halten IndexWriter's-Sperre (was Sie tun, wenn IndexWriter ruft die auf Zusammenführungsrichtlinie). Verändern Sie die zurückgegebene Sammlung nicht! |
NumDocs | Ruft die Gesamtzahl der Dokumente in diesem Index ab, einschließlich der Dokumente, die noch nicht geleert wurden (noch im RAM-Puffer), und einschließlich der Löschungen. Anmerkungen: Gepufferte Löschungen werden nicht gezählt. Wenn Sie wirklich brauchen, dass diese gezählt werden, sollten Sie anrufen Verpflichten() zuerst. |
OperationenAbgeschlossen | Indexschreibvorgänge sind alle asynchron. Gibt true zurück, wenn alle vollständig sind. |
Methoden
Name und Vorname | Beschreibung |
---|---|
AddDocument(IEnumerable ) | Fügt ein Dokument zu diesem Index hinzu. Beachten Sie, dass wenn ein Diese Methode löscht in regelmäßigen Abständen ausstehende Dokumente in das Verzeichnis (sehen IndexWriter) und löst auch periodisch Segmentzusammenführungen im Index gemäß aus Zusammenführungsrichtlinie in Benutzung. Zusammenführungen verbrauchen vorübergehend Speicherplatz im Verzeichnis. Der erforderliche Speicherplatz beträgt bis zu 1-mal die Größe aller zusammenzuführenden Segmente, wenn keine Reader/Searcher für den Index geöffnet sind, und bis zu 2-mal die Größe aller Segmente, die zusammengeführt werden, wenn Reader/Searcher für den Index geöffnet sind (siehe ForceMerge(Int32) für Details). Die Reihenfolge der durchgeführten primitiven Zusammenführungsoperationen wird durch die Zusammenführungsrichtlinie geregelt. Beachten Sie, dass jeder Begriff im Dokument nicht länger als sein darf MAX_TERM_LENGTH in Bytes, sonst an
Beachten Sie, dass es möglich ist, eine ungültige Unicode-Zeichenfolge in Java zu erstellen, wenn ein UTF16-Ersatzpaar fehlerhaft formatiert ist. In diesem Fall werden die ungültigen Zeichen stillschweigend durch das Unicode-Ersatzzeichen U+FFFD ersetzt. HINWEIS: Wenn diese Methode auf ein trifft |
AddDocument(IEnumerable , Analysator) | Fügt mithilfe der bereitgestellten Datei ein Dokument zu diesem Index hinzu See AddDocument(IEnumerable ) Einzelheiten zum Index und IndexWriter Zustand nach einem HINWEIS: Wenn diese Methode auf ein trifft |
AddDocuments(IDictionary , Analysator>) | |
AddDocuments(IEnumerable >) | Fügt atomar einen Block von Dokumenten mit nacheinander zugewiesenen Dokument-IDs hinzu, sodass ein externer Leser alle oder keine Dokumente sehen kann. WARNUNG: Der Index erfasst derzeit nicht, welche Dokumente als Block hinzugefügt wurden. Heute ist das in Ordnung, da durch das Zusammenführen ein Block erhalten bleibt. Die Reihenfolge der Dokumente innerhalb eines Segments bleibt erhalten, auch wenn untergeordnete Dokumente innerhalb eines Blocks gelöscht werden. Bei den meisten Suchfunktionen (z. B. Ergebnisgruppierung und Blockverknüpfung) müssen Sie Dokumente markieren. Wenn diese Dokumente gelöscht werden, funktionieren diese Suchfunktionen nicht wie erwartet. Offensichtlich erfordert das Hinzufügen von Dokumenten zu einem vorhandenen Block eine Neuindizierung des gesamten Blocks. Es ist jedoch möglich, dass Lucene in Zukunft Dokumente aggressiver neu anordnet (z. B. um eine bessere Indexkomprimierung zu erreichen). In diesem Fall müssen Sie Ihre Dokumente zu diesem Zeitpunkt möglicherweise vollständig neu indizieren. See AddDocument(IEnumerable ) Einzelheiten zum Index und IndexWriter Zustand nach einem HINWEIS: Tools, die einen Index offline aufteilen (z. B. IndexSplitter in Lucene.Net.Misc) oder Dokumente neu sortieren (z. B. IndexSorter in contrib), kennen diese atomar hinzugefügten Dokumente nicht und werden sie wahrscheinlich aufteilen. Die Verwendung solcher Werkzeuge erfolgt auf eigene Gefahr! HINWEIS: Wenn diese Methode auf ein trifft @lucene.experimental |
AddDocuments(IEnumerable >, Analysator) | Fügt atomar einen Block von Dokumenten hinzu, der mithilfe der bereitgestellten Analyse analysiert wird @lucene.experimental |
AddIndexes(IndexReader[]) | Führt die bereitgestellten Indizes in diesen Index ein. Die bereitgestellten IndexReaders sind nicht geschlossen.
See AddIndexes(IndexReader[]) Für Einzelheiten zur Transaktionssemantik ist temporärer freier Speicherplatz im erforderlich Verzeichnisund Nicht-CFS-Segmente auf einem
HINWEIS: Wenn diese Methode auf ein trifft Anmerkungen: Leere Segmente werden von dieser Methode gelöscht und nicht zu diesem Index hinzugefügt.
Anmerkungen: Diese Methode führt alle angegebenen zusammen IndexReaders in einer Zusammenführung. Wenn Sie beabsichtigen, eine große Anzahl von Lesern zusammenzuführen, ist es möglicherweise besser, diese Methode mehrmals aufzurufen, jedes Mal mit einer kleinen Anzahl von Lesern. Grundsätzlich gilt: Wenn Sie eine Zusammenführungsrichtlinie mit a verwenden
HINWEIS: wenn Sie anrufen Entsorgen (Boolean) mit |
AddIndexes(Verzeichnis[]) | Fügt alle Segmente aus einem Array von Indizes zu diesem Index hinzu. Dies kann zur Parallelisierung der Batch-Indizierung verwendet werden. Eine große Dokumentensammlung kann in Untersammlungen unterteilt werden. Jede Untersammlung kann parallel auf einem anderen Thread, Prozess oder Computer indiziert werden. Der vollständige Index kann dann durch Zusammenführen von Teilsammlungsindizes mit dieser Methode erstellt werden. Anmerkungen: Diese Methode erwirbt die Schreibsperre in jedem Verzeichnis, um sicherzustellen, dass keine IndexWriter ist derzeit geöffnet oder versucht zu öffnen, während dies ausgeführt wird. Diese Methode ist transaktional Beachten Sie, dass hierfür vorübergehend freier Speicherplatz im erforderlich ist Verzeichnis bis zum 2-fachen der Summe aller Eingabeindizes (einschließlich des Startindex). Wenn Leser/Sucher für den Startindex geöffnet sind, ist der benötigte temporäre freie Speicherplatz um die Größe des Startindex höher (siehe ForceMerge(Int32) für Details). Anmerkungen: Diese Methode kopiert nur die Segmente der eingehenden Indizes und führt sie nicht zusammen. Daher werden gelöschte Dokumente nicht entfernt und die neuen Segmente werden nicht mit den vorhandenen zusammengeführt. Dies erfordert, dass dieser Index nicht zu den hinzuzufügenden Indexen gehört.
HINWEIS: Wenn diese Methode auf ein trifft |
Verpflichten() | Überträgt alle ausstehenden Änderungen (hinzugefügte und gelöschte Dokumente, Segmentzusammenführungen, hinzugefügte Indizes usw.) in den Index und synchronisiert alle referenzierten Indexdateien, sodass ein Leser die Änderungen sieht und die Indexaktualisierungen einen Betriebssystem- oder Maschinenabsturz überstehen Leistungsverlust. Beachten Sie, dass dabei nicht darauf gewartet wird, dass laufende Hintergrundzusammenführungen abgeschlossen werden. Dies kann ein kostspieliger Vorgang sein, daher sollten Sie die Kosten in Ihrer Anwendung testen und dies nur tun, wenn es wirklich notwendig ist. Beachten Sie, dass dieser Vorgang aufruft Synchronisieren(ICollection ) auf den Indexdateien. Dieser Aufruf sollte erst zurückgegeben werden, wenn sich der Dateiinhalt und die Metadaten im stabilen Speicher befinden. Für FSDirectory, dies ruft den fsync des Betriebssystems auf. Aber Vorsicht: Einige Hardwaregeräte können Schreibvorgänge sogar während fsync zwischenspeichern und zurückkehren, bevor die Bits tatsächlich im stabilen Speicher sind, um den Anschein einer schnelleren Leistung zu erwecken. Wenn Sie über ein solches Gerät verfügen und es beispielsweise nicht über eine Notstrombatterie verfügt, kann es bei einem Stromausfall dennoch zu Datenverlusten kommen. Lucene kann die Konsistenz auf solchen Geräten nicht garantieren. HINWEIS: Wenn diese Methode auf ein trifft |
Alles löschen() | Löschen Sie alle Dokumente im Index. Diese Methode verwirft alle gepufferten Dokumente und entfernt alle Segmente aus dem Index. Diese Änderung wird erst sichtbar, wenn a Verpflichten() genannt worden. Diese Methode kann mit zurückgesetzt werden Rollback(). HINWEIS: Diese Methode ist viel schneller als die Verwendung HINWEIS: Diese Methode bricht alle laufenden Zusammenführungen zwangsweise ab. Wenn andere Threads laufen ForceMerge(Int32), AddIndexes(IndexReader[]) or ForceMergeDeletes() Methoden, die sie erhalten können MergePolicy.MergeAbortedExceptions. |
Dokumente löschen(Laufzeit) | Löscht die darin enthaltenen Dokumente HINWEIS: Wenn diese Methode auf ein trifft |
Dokumente löschen(Term[]) | Löscht die Dokumente, die einen der Begriffe enthalten. Alle angegebenen Löschvorgänge werden gleichzeitig angewendet und atomar gelöscht. HINWEIS: Wenn diese Methode auf ein trifft |
Dokumente löschen (Abfrage) | Löscht die Dokumente, die der bereitgestellten Abfrage entsprechen. HINWEIS: Wenn diese Methode auf ein trifft |
Dokumente löschen(Abfrage[]) | Löscht die Dokumente, die einer der bereitgestellten Abfragen entsprechen. Alle angegebenen Löschvorgänge werden gleichzeitig angewendet und atomar gelöscht. HINWEIS: Wenn diese Methode auf ein trifft |
DeleteUnusedFiles() | Experte: Entfernen Sie alle Indexdateien, die nicht mehr verwendet werden. IndexWriter Normalerweise werden nicht verwendete Dateien während der Indizierung selbst gelöscht. Unter Windows, das das Löschen geöffneter Dateien nicht zulässt, können diese Dateien jedoch nicht gelöscht werden, wenn im Index ein Reader geöffnet ist. Das ist in Ordnung, denn IndexWriter wird den Löschvorgang regelmäßig wiederholen. Aber, IndexWriter versucht es nicht so oft: nur beim Öffnen, Schließen, Leeren eines neuen Segments und Beenden einer Zusammenführung. Wenn Sie keine dieser Aktionen mit Ihrem durchführen IndexWriter, werden Sie sehen, dass die nicht verwendeten Dateien verbleiben. Wenn das ein Problem darstellt, rufen Sie diese Methode auf, um sie zu löschen (sobald Sie die geöffneten Reader geschlossen haben, die ihr Löschen verhindert haben). Darüber hinaus können Sie diese Methode aufrufen, um nicht referenzierte Index-Commits zu löschen. Dies kann nützlich sein, wenn Sie eine verwenden IndexDeletionPolicy Dadurch werden Index-Commits so lange beibehalten, bis einige Kriterien erfüllt sind, diese Commits jedoch nicht mehr benötigt werden. Andernfalls werden diese Commits beim nächsten Mal gelöscht Verpflichten() wird genannt. |
Entsorgen() | Überträgt alle Änderungen an einem Index, wartet auf den Abschluss ausstehender Zusammenführungen und schließt alle zugehörigen Dateien. Dies ist ein „langsames, ordnungsgemäßes Herunterfahren“, das lange dauern kann, insbesondere wenn eine große Zusammenführung ansteht: Wenn Sie nur Ressourcen schließen möchten, verwenden Sie Rollback(). Wenn Sie nur ausstehende Änderungen festschreiben und Ressourcen schließen möchten, lesen Sie Entsorgen (Boolean). Beachten Sie, dass dies ein kostspieliger Vorgang sein kann. Versuchen Sie daher, einen einzelnen Writer wiederzuverwenden, anstatt einen neuen zu schließen und zu öffnen. Sehen Verpflichten() für Vorbehalte bezüglich des Schreib-Caching einiger E/A-Geräte. Wenn ein Wenn Sie die zugrunde liegende Ursache beheben können (z. B. Speicherplatz freigeben), können Sie anrufen Entsorgen() wieder. Andernfalls können Sie die Aufhebung der Schreibsperre erzwingen (gefährlich, da dann möglicherweise gepufferte Dokumente verloren gehen). IndexWriter Beispiel), dann können Sie so etwas tun:
Danach müssen Sie sicherstellen, dass Sie die Writer-Instanz nicht mehr verwenden. HINWEIS: Wenn diese Methode auf ein trifft |
Entsorgen (Boolean) | Schließt den Index mit oder ohne Warten auf den Abschluss der aktuell ausgeführten Zusammenführungen. Dies ist nur sinnvoll, wenn a verwendet wird MergeScheduler Das führt Zusammenführungen in Hintergrundthreads aus. HINWEIS: Wenn diese Methode auf ein trifft HINWEIS: Es ist gefährlich, immer anzurufen
|
DoAfterFlush() | Ein Hook zum Erweitern von Klassen zum Ausführen von Vorgängen, nachdem ausstehende hinzugefügte und gelöschte Dokumente in den geleert wurden Verzeichnis aber bevor die Änderung festgeschrieben wird (neue segment_N-Datei geschrieben). |
DoBeforeFlush() | Ein Hook zum Erweitern von Klassen zum Ausführen von Vorgängen, bevor ausstehende hinzugefügte und gelöschte Dokumente in den geleert werden Verzeichnis. |
Gewährleisten() | Wird intern verwendet, um einen zu werfen
Aufrufe SureOpen(Boolean). |
SureOpen(Boolean) | Wird intern verwendet, um einen zu werfen |
Flush(Boolean, Boolean) | Leeren Sie alle im Arbeitsspeicher gepufferten Aktualisierungen (Hinzufügungen und Löschungen) in die Verzeichnis. |
ForceMerge(Int32) | Erzwingt die Zusammenführungsrichtlinie zum Zusammenführen von Segmenten, bis <= vorhanden sind
Dies ist eine furchtbar kostspielige Operation, insbesondere wenn Sie an einer kleinen Person vorbeikommen Beachten Sie, dass hierfür bis zum Doppelten des freien Speicherplatzes der Indexgröße in Ihrem Verzeichnis erforderlich ist (2X, wenn Sie das zusammengesetzte Dateiformat verwenden). Wenn Ihr Index beispielsweise 3 MB groß ist, benötigen Sie für diesen Vorgang bis zu 10 MB freien Speicherplatz (20 MB, wenn Sie das zusammengesetzte Dateiformat verwenden). Außerdem ist es am besten, anzurufen Verpflichten() danach, erlauben IndexWriter Speicherplatz freigeben. Wenn einige, aber nicht alle Leser während der Zusammenführung erneut geöffnet werden, führt dies dazu, dass mehr als das Zweifache des temporären Speicherplatzes verbraucht wird, da diese neuen Leser dann die temporären Segmente zu diesem Zeitpunkt offen halten. Es ist am besten, Reader während der Zusammenführung nicht erneut zu öffnen. Die tatsächliche vorübergehende Nutzung könnte viel geringer sein als diese Zahlen (dies hängt von vielen Faktoren ab). Sobald dies abgeschlossen ist, ist die Gesamtgröße des Index im Allgemeinen kleiner als die Größe des Startindex. Es könnte etwas kleiner sein (wenn viele Löschvorgänge ausstehen) oder nur etwas kleiner. Wenn ein Dieser Aufruf führt die Segmente zusammen, die im Index vorhanden waren, als der Aufruf begann. Wenn andere Threads noch Dokumente hinzufügen und Segmente leeren, werden diese neu erstellten Segmente nicht zusammengeführt, es sei denn, Sie rufen auf ForceMerge(Int32) erneut. HINWEIS: Wenn diese Methode auf ein trifft HINWEIS: wenn Sie anrufen Entsorgen (Boolean)
mit |
ForceMerge(Int32, Boolean) | Genau wie ForceMerge(Int32), außer dass Sie angeben können, ob der Anruf blockiert werden soll, bis alle Zusammenführungen abgeschlossen sind. Dies ist nur mit a sinnvoll Lucene.Net.Index.IndexWriter.mergeScheduler das in der Lage ist, Merges in Hintergrund-Threads auszuführen. HINWEIS: Wenn diese Methode auf ein trifft |
ForceMergeDeletes() | Erzwingt die Zusammenführung aller Segmente, die gelöschte Dokumente haben. Die tatsächlich auszuführenden Zusammenführungen werden durch die bestimmt Zusammenführungsrichtlinie. Zum Beispiel die Standardeinstellung TieredMergePolicy wählt ein Segment nur aus, wenn der Prozentsatz der gelöschten Dokumente über 10 % liegt. Dies ist oft eine schrecklich kostspielige Operation; selten ist es gerechtfertigt. Rufen Sie uns an, um zu erfahren, wie viele Löschungen in Ihrem Index ausstehen NumDeletedDocs. HINWEIS: Diese Methode leert zunächst ein neues Segment (sofern indizierte Dokumente vorhanden sind) und wendet alle gepufferten Löschvorgänge an. HINWEIS: Wenn diese Methode auf ein trifft |
ForceMergeDeletes(Boolesch) | Genau wie ForceMergeDeletes(), außer dass Sie angeben können, ob der Aufruf blockiert werden soll, bis der Vorgang abgeschlossen ist. Dies ist nur mit a sinnvoll MergeScheduler das in der Lage ist, Merges in Hintergrund-Threads auszuführen. HINWEIS: Wenn diese Methode auf ein trifft HINWEIS: wenn Sie anrufen Entsorgen (Boolean)
mit |
GetReader(Boolean) | Experte: Gibt einen schreibgeschützten Leser zurück, der alle festgeschriebenen und nicht festgeschriebenen Änderungen am Index abdeckt. Dies ermöglicht eine Suche „nahezu in Echtzeit“, da Änderungen, die während einer durchgeführt werden, berücksichtigt werden IndexWriter Session kann schnell für die Suche verfügbar gemacht werden, ohne den Writer zu schließen oder aufzurufen Verpflichten(). Beachten Sie, dass dies funktional dem Aufruf von Flush() und dem anschließenden Öffnen eines neuen Readers entspricht. Die Bearbeitungszeit dieser Methode sollte jedoch kürzer sein, da sie potenziell kostspielige Maßnahmen vermeidet Verpflichten(). Sie müssen die schließen IndexReader wird von dieser Methode zurückgegeben, sobald Sie sie nicht mehr verwenden. Es ist in der Nähe von Echtzeit, da es keine feste Garantie dafür gibt, wie schnell Sie ein neues Lesegerät erhalten, nachdem Sie Änderungen vorgenommen haben IndexWriter. Sie müssen in Ihrer Situation experimentieren, um festzustellen, ob es schnell genug ist. Da dies eine neue und experimentelle Funktion ist, melden Sie bitte Ihre Ergebnisse, damit wir lernen, uns verbessern und iterieren können. Der resultierende Reader unterstützt DoOpenIfChanged(), aber dieser Aufruf wird einfach zu dieser Methode zurückgeleitet (obwohl sich dies in Zukunft ändern kann). Beim allerersten Aufruf dieser Methode unternimmt diese Writer-Instanz alle Anstrengungen, um die Reader, die sie öffnet, für Zusammenführungen, Anwenden von Löschvorgängen usw. zu bündeln. Dies bedeutet, dass zusätzliche Ressourcen (RAM, Dateideskriptoren, CPU-Zeit) verbraucht werden. Für eine geringere Latenz beim erneuten Öffnen eines Readers sollten Sie Folgendes festlegen MergedSegmentWarmer um ein neu zusammengeführtes Segment vorzuwärmen, bevor es in den Index übernommen wird. Dies ist wichtig, um die Verzögerung zwischen Index und Suche nach einer großen Zusammenführung zu minimieren. Wenn in einem anderen Thread ein AddIndexes*-Aufruf läuft, dann durchsucht dieser Reader nur die bisher erfolgreich kopierten Segmente aus dem Fremdindex. HINWEIS: Sobald der Writer entsorgt ist, können alle ausstehenden Reader weiter verwendet werden. Wenn Sie jedoch versuchen, einen dieser Reader erneut zu öffnen, werden Sie auf ein treffen @lucene.experimental |
HatLöschungen() | Rücksendungen |
HasPendingMerges() | Experte: Gibt „true“ zurück, wenn Zusammenführungen auf die Planung warten. @lucene.experimental |
HasUncommittedChanges() | Rücksendungen |
IsLocked(Verzeichnis) | Rücksendungen |
MaybeMerge() | Experte: fragt der Lucene.Net.Index.IndexWriter.mergePolicy ob jetzt Zusammenführungen erforderlich sind, und wenn ja, führt die angeforderten Zusammenführungen aus und iteriert dann (erneut testen, ob Zusammenführungen erforderlich sind), bis keine Zusammenführungen mehr zurückgegeben werden Lucene.Net.Index.IndexWriter.mergePolicy. Explizite Aufrufe an MaybeMerge() sind in der Regel nicht notwendig. Der häufigste Fall ist, dass sich die Parameter der Zusammenführungsrichtlinie geändert haben. Diese Methode ruft die auf Lucene.Net.Index.IndexWriter.mergePolicy mit EXPLIZIT. HINWEIS: Wenn diese Methode auf ein trifft |
Zusammenführen(MergePolicy.OneMerge) | Führt die angegebenen Segmente zusammen und ersetzt sie im Stapel durch ein einzelnes Segment. @lucene.experimental |
MergeFinish(MergePolicy.OneMerge) | Führt den Abschluss einer Zusammenführung durch, was schnell ist, aber die synchronisierte Sperre beibehält IndexWriter Beispiel. |
NextMerge() | Experte: der Lucene.Net.Index.IndexWriter.mergeScheduler ruft diese Methode auf, um die nächste von angeforderte Zusammenführung abzurufen Zusammenführungsrichtlinie @lucene.experimental |
NumDeletedDocs(SegmentCommitInfo) | Ermitteln Sie die Anzahl der gelöschten Dokumente für einen gepoolten Leser. Wenn der Reader nicht gepoolt wird, wird der delCount der segmentInfo zurückgegeben. |
NumRamDocs() | Experte: Gibt die Anzahl der aktuell im RAM gepufferten Dokumente zurück. |
VorbereitenCommit() | Experte: Bereiten Sie sich auf den Commit vor. Dies führt die erste Phase des 2-Phasen-Commits durch. Diese Methode führt alle Schritte aus, die zum Festschreiben von Änderungen seit dem Öffnen dieses Writers erforderlich sind: Löscht ausstehende hinzugefügte und gelöschte Dokumente, synchronisiert die Indexdateien und schreibt den größten Teil der nächsten segment_N-Datei. Nachdem Sie dies aufgerufen haben, müssen Sie entweder anrufen Verpflichten() um das Commit abzuschließen, oder Rollback() um das Commit rückgängig zu machen und alle seit dem Öffnen des Writers vorgenommenen Änderungen rückgängig zu machen. Sie können auch einfach anrufen Verpflichten() direkt ohne VorbereitenCommit() Zuerst wird diese Methode intern aufgerufen VorbereitenCommit(). HINWEIS: Wenn diese Methode auf ein trifft |
RamSizeInBytes() | Experte: Gibt die Gesamtgröße aller aktuell im Speicher zwischengespeicherten Indexdateien zurück. Nützlich für die Größenverwaltung mit FlushRamDocs() |
Rollback() | Schließe IndexWriter ohne Änderungen zu übernehmen, die seit dem letzten Commit (oder seit dem Öffnen, wenn Commit nicht aufgerufen wurde) vorgenommen wurden. Dadurch werden alle temporären Dateien entfernt, die erstellt wurden. Danach ist der Status des Index derselbe wie damals Verpflichten() zuletzt aufgerufen wurde oder wann dieser Autor zum ersten Mal geöffnet wurde. Dadurch wird auch ein vorheriger Anruf gelöscht VorbereitenCommit(). |
SegString() | Gibt eine Zeichenfolgenbeschreibung aller Segmente zum Debuggen zurück. @lucene.intern |
SegString(IEnumerable ) | Gibt eine Zeichenfolgenbeschreibung der angegebenen Segmente zum Debuggen zurück. @lucene.intern |
SegString(SegmentCommitInfo) | Gibt eine Zeichenfolgenbeschreibung des angegebenen Segments zum Debuggen zurück. @lucene.intern |
SetCommitData(IDictionary ) | Legt die Commit-Benutzerdatenzuordnung fest. Diese Methode wird von als Transaktion betrachtet IndexWriter und wird begangen (Verpflichten() auch wenn keine weiteren Änderungen an der Writer-Instanz vorgenommen wurden. Beachten Sie, dass Sie diese Methode vorher aufrufen müssen VorbereitenCommit()andernfalls wird es nicht in die Folgeversion aufgenommen Verpflichten(). Anmerkungen: Das Wörterbuch wird intern geklont, daher hat eine Änderung des Wörterbuchinhalts nach dem Aufruf dieser Methode keine Auswirkung. |
TryDeleteDocument(IndexReader, Int32) | Experte: Löschversuche anhand der Dokument-ID, sofern diese angegeben ist HINWEIS: Mit dieser Methode können nur Dokumente gelöscht werden, die für den aktuell geöffneten NRT-Reader sichtbar sind. Wenn Sie nach dem Öffnen des NRT-Readers indizierte Dokumente löschen müssen, müssen Sie die anderen DeleteDocument()-Methoden verwenden (z. B. Dokumente löschen(Laufzeit)). |
Entsperren (Verzeichnis) | Entsperrt den Index im benannten Verzeichnis zwangsweise. Achtung: Dies sollte nur von Fehlerwiederherstellungscode verwendet werden, wenn bekannt ist, dass aktuell kein anderer Prozess oder Thread auf diesen Index zugreift. |
UpdateBinaryDocValue(Term, String, BytesRef) | Aktualisiert ein Dokument BinaryDocValues für Anmerkungen: Diese Methode ersetzt derzeit den vorhandenen Wert aller betroffenen Dokumente durch den neuen Wert.
Anmerkungen: wenn diese Methode auf ein trifft |
UpdateDocument(Term, IEnumerable ) | Aktualisiert ein Dokument, indem zunächst die darin enthaltenen Dokumente gelöscht werden HINWEIS: Wenn diese Methode auf ein trifft |
UpdateDocument(Term, IEnumerable , Analysator) | Aktualisiert ein Dokument, indem zunächst die darin enthaltenen Dokumente gelöscht werden HINWEIS: Wenn diese Methode auf ein trifft |
UpdateDocuments(Term, IEnumerable >) | Löscht atomar Dokumente, die mit den angegebenen übereinstimmen
@lucene.experimental |
UpdateDocuments(Term, IEnumerable >, Analysator) | Löscht atomar Dokumente, die mit den angegebenen übereinstimmen
@lucene.experimental |
UpdateNumericDocValue(Term, String, Nullable ) | Aktualisiert ein Dokument NumerischeDocValues für
HINWEIS: Wenn diese Methode auf ein trifft |
WaitForMerges() | Warten Sie, bis alle derzeit ausstehenden Zusammenführungen abgeschlossen sind. Es ist garantiert, dass alle vor dem Aufruf dieser Methode begonnenen Zusammenführungen abgeschlossen sind, sobald diese Methode abgeschlossen ist. |