Ricerca in Lucene distribuita
Le ricerche vengono eseguite dopo l'indicizzazione dei dati. Per cercare i dati, NCacheDirectory
è passato al IndexReader
. È possibile aprire più lettori di indici rispetto a un indice tramite un IndexWriter
o un NCacheDirectory
. L'istanza del IndexReader
è passato al IndexSearcher
. IndexSearcher
è responsabile della ricerca dei dati in base alle query fornite. Lucene fornisce un'ampia gamma di query e Distributed Lucene supporta tutte le query Lucene.
Note:
Questa funzionalità è disponibile anche in NCache Professional.
Lucene.Net.Search.TopDocs.TotalHits
rappresenta il numero di risultati migliori ottenuti a seguito della ricerca effettuata. Nel caso del Distributed Lucene, questo valore viene convertito da an integer
a long
. Allo stesso modo, i valori di Lucene.Net.Search.ScoreDocs.Doc
, Lucene.Net.Index.IndexReader.NumDoc
e Lucene.Net.Index.IndexReader.MaxDocs
sono anche convertiti da an integer
a long
.
In Lucene distribuito, se elimini a Document
e chiama commit
, sarai comunque in grado di leggere il contenuto del file cancellato Document
attraverso un'istanza di an IndexReader
, a condizione che questo IndexReader
è stato aperto prima di effettuare il commit
chiamata (dopo la cancellazione). Se smaltisci questo IndexReader
dopo il tuo commit
chiama e poi riaprilo, non sarai in grado di leggere il contenuto del cancellato Document
.
Puoi recuperare i risultati anche quando il cluster è parziale. NCache Lucene distribuito fornisce un AllowPartialResults
flag che può essere impostato su TRUE
per il recupero dei dati parziali. Per impostazione predefinita, il suo valore è FALSE
.
Prerequisiti
- Per conoscere i prerequisiti standard richiesti per lavorare con all NCache Per le funzionalità lato client fare riferimento alla pagina specificata Prerequisiti dell'API lato client.
- Assicurati di aver creato e avviato una cache Lucene tramite il file NCache Centro di gestione or Interfaccia della riga di comando.
- Assicurarsi che Notifiche ai clienti sono abilitati.
- Assicurati che la tua applicazione non stia utilizzando alcuna DLL/Riferimento Lucene nativa.
- Per i dettagli dell'API fare riferimento a: Lettore di indici, Cercatore di indici, Indice scrittore, NCacheelenco, GetReader, Versione Lucene, Analyzer, Analizzatore di spazi bianchi, QueryParser, IndexWriterConfig.
Ricerca dei dati
L'esempio di codice riportato di seguito mostra come cercare i documenti indicizzati con Distributed Lucene.
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:
Dovresti chiamare Dispose
alla fine di ogni reader
altrimenti, vive nella memoria e causa perdite di memoria.
Risorse addizionali
NCache fornisce un'applicazione di esempio per la ricerca dei documenti nel Distributed Lucene on GitHub.
Vedere anche
.NETTO: Lucene.Net.Search spazio dei nomi.