Pesquisando no Lucene Distribuído
As pesquisas são realizadas após a indexação dos dados. Para pesquisar os dados, NCacheDirectory
é passado para o IndexReader
. Vários leitores de índice podem ser abertos em um índice por meio de um IndexWriter
ou um NCacheDirectory
. A instância do IndexReader
é passado para o IndexSearcher
. O IndexSearcher
é responsável por pesquisar os dados de acordo com as consultas fornecidas. O Lucene fornece uma ampla variedade de consultas, e o Distributed Lucene oferece suporte a todas as consultas do Lucene.
Note
Este recurso também está disponível em NCache Professional.
Lucene.Net.Search.TopDocs.TotalHits
representa o número de resultados principais alcançados como resultado da pesquisa realizada. No caso do Lucene Distribuído, esse valor é convertido de um integer
para long
. Da mesma forma, os valores de Lucene.Net.Search.ScoreDocs.Doc
, Lucene.Net.Index.IndexReader.NumDoc
e Lucene.Net.Index.IndexReader.MaxDocs
também são convertidos de um integer
para long
.
No Lucene distribuído, se você excluir um Document
e ligue commit
, você ainda poderá ler o conteúdo do arquivo excluído Document
através de uma instância de IndexReader
, desde que este IndexReader
foi aberto antes de você fazer o commit
chamada (após exclusão). Se você descartar isso IndexReader
depois do seu commit
chamar e reabri-lo, você não poderá ler o conteúdo do arquivo excluído Document
.
Você pode recuperar os resultados mesmo quando o cluster está parcialmente. NCache O Distributed Lucene fornece um AllowPartialResults
sinalizador que pode ser definido como TRUE
para recuperar os dados parciais. Por padrão, seu valor é FALSE
.
Pré-requisitos
- Para aprender sobre os pré-requisitos padrão necessários para trabalhar com todos os NCache recursos do lado do cliente, consulte a página fornecida em Pré-requisitos da API do lado do cliente.
- Certifique-se de ter criado e iniciado um cache do Lucene por meio do NCache Centro de Gerenciamento or Interface da Linha de comando.
- Certifique-se de que Notificações do cliente estão habilitados.
- Certifique-se de que seu aplicativo não esteja usando nenhuma DLL/referência nativa do Lucene.
- Para detalhes da API, consulte: Leitor de Índice, Pesquisador de índice, IndexWriter, NCacheDiretório, ObterLeitor, LuceneVersão, Analista, Analisador de espaço em branco, QueryParser, IndexWriterConfig.
Pesquisando dados
A amostra de código abaixo demonstra como você pode pesquisar seus documentos indexados com o 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
Você deveria ligar Dispose
no final de cada reader
por exemplo, caso contrário, ele permanece na memória e causa vazamentos de memória.
Recursos adicionais
NCache fornece um aplicativo de exemplo para pesquisar os documentos no Distributed Lucene em GitHub.
Veja também
.INTERNET: Lucene.Net.Search espaço para nome.