2015-05-29 45 views
2

在Lucene.Net中,如何根據字段值檢索單個文檔?在這種情況下,字段值對於單個文檔將始終是唯一的。Lucene.Net - 如何檢索單個文檔

外地我想用的是「ID」的,這是我的文檔的結構:用於檢索單個項目

var doc = new Document(); 

// Add lucene fields mapped to DB fields 
doc.Add(new Field("Id", searchResult.Id, Field.Store.YES, Field.Index.NOT_ANALYZED)); 
doc.Add(new Field("Name", searchResult.Name, Field.Store.YES, Field.Index.ANALYZED)); 
doc.Add(new Field("Region", searchResult.Region, Field.Store.YES, Field.Index.ANALYZED)); 
doc.Add(new Field("Type", searchResult.Type, Field.Store.YES, Field.Index.NOT_ANALYZED)); 
doc.Add(new Field("Permalink", searchResult.Permalink, Field.Store.YES, Field.Index.NOT_ANALYZED)); 

我可以找到很多的多個結果搜索的Lucene的例子,但沒有。我相信這一定是可能的,因爲我認爲只需要更新Lucene中的特定文檔即可。

我想,第一步是將「Id」字段更改爲ANALYZED而不是NOT_ANALYZED並重建索引。

我覺得有可能是一個很好的簡單方法,我還沒有偶然發現檢索單個文檔而不是使用QueryParser?

回答

1

您可以使用查詢分析器是更好的辦法在Lucene的補充文件,我用它來創建多個項目指標,

doc.Add(new Field("Id", searchResult.Id,Field.Store.YES, Field.Index.ANALYZED_NO_NORMS));  
+3

這是怎麼一個單一的文件回答與OP詢問的問題有關嗎? :o –

0

抓取使用Lucene.Net 3.0.3

 //Set up 
     var directory = FSDirectory.Open(new DirectoryInfo("/path/to/your/index")); 
     var reader = IndexReader.Open(directory, false); 
     var searcher = new IndexSearcher(reader); 

     //find your document location 
     var analyzer = new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30); 
     var query = new QueryParser(Lucene.Net.Util.Version.LUCENE_30, "_id", analyzer).Parse("_id:1"); 
     var result = searcher.Search(query, 1).ScoreDocs.FirstOrDefault(); 

     //Fetch a document by index number. This index number is stored as an integer in result.Doc 
     Document d = searcher.Doc(result.Doc); 

     //return 
     return d;