我的搜索文本为“ma”,我有两个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);
答案 0 :(得分:2)
也许你可以使用luke。它是一个有用的诊断工具,可以显示现有Lucene索引的内容并执行其他有趣的操作。我自己没有使用它,所以我不确定,但我认为它可以帮助你调试这个问题。祝你好运!
答案 1 :(得分:0)
我能够解决我的问题:
Index Writer只能创建一次。如果不创建新的IndexWriter,您可以检查索引是否退出。例如:
// IndexWriter Contructor的最后一个参数bool,表示你想创建一个newIndexWriter
IndexWriter writer = new IndexWriter(GetFileInfo(indexName), analyzer, true);
在添加新文档时,您必须检查索引是否存在,如果存在,则只需将bool param作为false传递给IndexWriter构造函数:
IndexWriter writer = new IndexWriter(GetFileInfo(indexName), analyzer, false);
writer.AddDocument(CreateDocument(Id, text, dateTime));
writer.Optimize();
writer.Close();