Búsqueda en Distributed Lucene
Note
Esta característica también está disponible en NCache Professional.
Las búsquedas se realizan después de indexar los datos. Para buscar los datos, NCacheDirectory
se pasa al IndexReader
. Se pueden abrir múltiples lectores de índices contra un índice a través de un IndexWriter
o un NCacheDirectory
. La instancia del IndexReader
se pasa al IndexSearcher
. IndexSearcher
es responsable de buscar los datos de acuerdo con las consultas dadas. Lucene proporciona una amplia gama de consultas y Distributed Lucene admite todas las consultas de Lucene.
Lucene.Net.Search.TopDocs.TotalHits
representa el número de resultados principales obtenidos como resultado de la búsqueda realizada. En el caso de Distributed Lucene, este valor se convierte de un integer
a long
. Del mismo modo, los valores de Lucene.Net.Search.ScoreDocs.Doc
, Lucene.Net.Index.IndexReader.NumDoc
y Lucene.Net.Index.IndexReader.MaxDocs
también se convierten de un integer
a long
.
En Distributed Lucene, si elimina un Document
y llama commit
, aún podrá leer el contenido de los archivos eliminados Document
a través de una instancia de un IndexReader
, siempre que este IndexReader
se abrió antes de que usted hiciera el commit
llamar (después de la eliminación). Si se deshace de esto IndexReader
despues de ti commit
llame y luego vuelva a abrirlo, no podrá leer el contenido del borrado Document
.
Puede recuperar los resultados incluso cuando el clúster está parcialmente. NCache Lucene distribuido proporciona una AllowPartialResults
bandera que se puede establecer en TRUE
para recuperar los datos parciales. Por defecto, su valor es FALSE
.
Requisitos previos
- Para obtener información sobre los requisitos previos estándar necesarios para trabajar con todos NCache características del lado del cliente, consulte la página proporcionada en Requisitos previos de la API del lado del cliente.
- Asegúrese de haber creado e iniciado un caché de Lucene a través del NCache Centro de gestion or Interfaz de línea de comandos.
- Asegurar que Notificaciones de clientes están habilitados
- Asegúrese de que su aplicación no utilice ninguna DLL/referencia nativa de Lucene.
- Para obtener detalles de la API, consulte: Lector de índices, Buscador de índices, Escritor de índices, NCacheDirectorio, Obtener lector, LuceneVersión, Analizador, Analizador de espacios en blanco, Analizador de consultas, Configuración de IndexWriter.
Búsqueda de datos
El ejemplo de código a continuación demuestra cómo puede buscar sus documentos indexados 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
Deberías llamar Dispose
al final de cada reader
Por ejemplo, de lo contrario, vive en la memoria y provoca pérdidas de memoria.
Recursos adicionales
NCache proporciona una aplicación de muestra para buscar los documentos en Distributed Lucene en GitHub.
Vea también
.NETO: Lucene.Net.Búsqueda espacio de nombres