Lucene.NET的平行索引建立
有時對於一個Document來說,有一些Field會被頻繁地操作,而另一些Field則不會。這時可以將頻繁操作的Field和其他Field分開存放,而在搜尋時同時檢索這兩部分Field而提取出一個完整的Document。
這要求兩個索引包含的Document的數量必須相同, 在建立索引的時候,可以同時建立多個IndexWriter,將一個Document根據需要拆分成多個包含部分Field的Document,並將這些Document分別添加到不同的索引。
而在搜尋時,則必須藉助ParallelReader類來整合。
Directory dir1=FSDirectory.getDirectory(new File(INDEX_DIR1),false);
Directory dir2=FSDirectory.getDirectory(new File(INDEX_DIR2),false);
ParallelReader preader=new ParallelReader();
preader.add(IndexReader.open(dir1));
preader.add(IndexReader.open(dir2));
IndexSearcher searcher=new IndexSearcher(preader);
之後的操作和一般的搜尋相同。
Lucene.NET 同時搜尋多個索引
在建立索引的時候可以根據分類需要建立多個索引,而在搜尋時可以同時搜尋所有的索引, 這一功能通過MultiSearcher實現。
Java模式的寫法:
IndexSearcher[] searchers=new IndexSearcher[]{new IndexSearcher(dir1),new IndexSearcher(dir2)};
MultiSearcher msearcher=new MultiSearcher(searchers);
Lucene.NET中多個索引檔案的查詢:
.NET模式的寫法:
MultiReader reader = new MultiReader(new IndexReader[] {
IndexReader.Open(System.IO.Path.Combine(Tpl.CommonSet.Get("ThreadsIndexsData"),"main")),
IndexReader.Open(System.IO.Path.Combine(Tpl.CommonSet.Get("ThreadsIndexsData"),"1")) }
);
IndexSearcher searcher = new IndexSearcher(reader);