Lucene Searcher возвращает только один результат матча - PullRequest
0 голосов
/ 02 июля 2011

Мой текст для поиска выглядит как "ма", и у меня есть два документа lucene, в которых в качестве текста указано ma.Но взамен я получаю только один документ.

Ниже приведен код:

//adding deocument 
document.Add(new Field("Text",text,Field.Store.YES, Field.Index.TOKENIZED));

//search logic :

IndexReader reader = IndexReader.Open(GetFileInfo(indexName));
//create an index searcher that will perform the search
IndexSearcher searcher = new IndexSearcher(reader);

//List of ID
List<string> searchResultID = new List<string>();

//build a query object
QueryParser parser = new QueryParser("Text", analyzer);
parser.SetAllowLeadingWildcard(true);
Query query = parser.Parse(searchText);
//execute the query
Hits hits = searcher.Search(query);

Ответы [ 2 ]

2 голосов
/ 03 июля 2011

Может быть, вы могли бы использовать Люк . Это полезный диагностический инструмент, который может отображать содержимое существующего индекса Lucene и делать другие интересные вещи. Я сам этим не пользовался, поэтому не уверен, но думаю, что это может помочь вам в устранении этой проблемы. Удачи!

0 голосов
/ 04 июля 2011

Мне удалось решить мою проблему:

Index Writer должен быть создан только один раз. Вы можете проверить, завершается ли индекс или нет, если вы не создаете новый IndexWriter. например:

// Последний параметр bool IndexWriter Contructor, который говорит, что вы хотите создать newIndexWriter или нет

IndexWriter writer = new IndexWriter(GetFileInfo(indexName), analyzer, true);

При добавлении нового документа вы должны проверить, существует индекс или нет, если он существует, а затем просто передать параметру bool значение false в конструктор IndexWriter:

IndexWriter  writer = new IndexWriter(GetFileInfo(indexName), analyzer, false);
 writer.AddDocument(CreateDocument(Id, text, dateTime));
 writer.Optimize();
 writer.Close();
...