Suchen in verteiltem Lucene
Note
Diese Funktion ist auch in verfügbar NCache Professional.
Die Suche wird nach der Indizierung der Daten durchgeführt. Um die Daten zu durchsuchen, NCacheDirectory
wird an die weitergegeben IndexReader
. Mehrere Index-Reader können für einen Index entweder über geöffnet werden IndexWriter
oder NCacheDirectory
. Die Instanz des IndexReader
wird an die weitergegeben IndexSearcher
dem „Vermischten Geschmack“. Seine IndexSearcher
ist für die Suche der Daten gemäß den gegebenen Abfragen verantwortlich. Lucene bietet eine breite Palette von Abfragen, und das verteilte Lucene unterstützt alle Lucene-Abfragen.
Lucene.Net.Search.TopDocs.TotalHits
stellt die Anzahl der Top-Ergebnisse dar, die als Ergebnis der durchgeführten Suche erzielt wurden. Im Fall von Distributed Lucene wird dieser Wert aus einem konvertiert integer
zu long
. Ebenso sind die Werte von Lucene.Net.Search.ScoreDocs.Doc
, Lucene.Net.Index.IndexReader.NumDoc
und Lucene.Net.Index.IndexReader.MaxDocs
werden auch von einem umgewandelt integer
zu long
.
Wenn Sie in Distributed Lucene a Document
und Ruf an commit
, können Sie den Inhalt der gelöschten Datei weiterhin lesen Document
durch eine Instanz von an IndexReader
, sofern dies IndexReader
wurde geöffnet, bevor Sie das gemacht haben commit
Anruf (nach Löschung). Wenn Sie dies entsorgen IndexReader
nach ihrem commit
Wenn Sie einen Anruf tätigen und ihn dann erneut öffnen, können Sie den Inhalt der gelöschten Datei nicht mehr lesen Document
.
Sie können die Ergebnisse auch abrufen, wenn der Cluster ist Teil-. NCache Distributed Lucene bietet eine AllowPartialResults
Flag, auf das gesetzt werden kann TRUE
zum Abrufen der Teildaten. Standardmäßig ist sein Wert FALSE
.
Voraussetzungen:
- Lernen Sie die Standardvoraussetzungen kennen, die für die Arbeit mit allen erforderlich sind NCache Weitere Informationen zu clientseitigen Funktionen finden Sie auf der angegebenen Seite Clientseitige API-Voraussetzungen.
- Stellen Sie sicher, dass Sie über die einen Lucene-Cache erstellt und gestartet haben NCache Management Center or Befehlszeilenschnittstelle.
- Stellen Sie sicher, dass Client-Benachrichtigungen sind aktiviert.
- Stellen Sie sicher, dass Ihre Anwendung keine native Lucene-DLL/-Referenz verwendet.
- Einzelheiten zur API finden Sie unter: IndexReader, IndexSucher, IndexWriter, NCacheVerzeichnis, GetReader, LuceneVersion, Analyzer, WhitespaceAnalyzer, QueryParser, IndexWriterConfig.
Daten durchsuchen
Das folgende Codebeispiel zeigt, wie Sie Ihre indizierten Dokumente mit Distributed Lucene durchsuchen können.
IndexReader reader = null;
IndexSearcher indexSearcher = null;
// Create a directory and open it on the cache and the index path
NCacheDirectory ncacheDirectory = NCacheDirectory.Open("demoCache",
"luceneIndex");
// Specify lucene version and analyzer type
LuceneVersion version = LuceneVersion.LUCENE_48;
Analyzer analyzer = new WhitespaceAnalyzer(version);
// Create an indexWriterConfig which holds all the configurations to create an instance of the writer
IndexWriterConfig config = new IndexWriterConfig(LuceneVersion.
LUCENE_48, analyzer);
// Create an instance of the writer
IndexWriter indexWriter = new IndexWriter(ncacheDirectory, new
IndexWriterConfig(LuceneVersion.LUCENE_48, analyzer));
// Open a new reader instance
// The 'applyAllDeletes' is set to true which means all enqueued deletes will be applied on the writer
reader = indexWriter.GetReader(true);
// OR
// reader = DirectoryReader.Open(indexWriter, true);
// OR
// reader = DirectoryReader.Open(ncacheDirectory, 1);
// Allow partial results in case of partial connectivity with cluster
reader.AllowPartialResults = true;
// A searcher is opened to perform searching
indexSearcher = new IndexSearcher(reader);
// Specify the searchTerm and the fieldName
string searchTerm = "Beverages";
string fieldName = "Category";
// Specify lucene version and analyzer type
LuceneVersion version = LuceneVersion.LUCENE_48;
Analyzer analyzer = new WhitespaceAnalyzer(version);
// Create a query parser and parse the query with the parser
QueryParser parser = new QueryParser(version, fieldName,
analyzer);
Query query = parser.Parse(searchTerm);
// Returns the top 10000 hits from the result set
ScoreDoc[] docsFound = indexSearcher.Search(query, 10000).
ScoreDocs;
// Please make sure that no operations should be performed after calling this
if (indexSearcher != null) indexSearcher.Dispose();
if (reader != null) reader.Dispose();
Note
Sie sollten anrufen Dispose
am Ende von jedem reader
Andernfalls bleibt es im Speicher und verursacht Speicherverluste.
Weitere Informationen
NCache stellt eine Beispielanwendung zum Durchsuchen der Dokumente in Distributed Lucene bereit GitHub.
Siehe auch
.NETZ: Lucene.Net.Search Namespace.