可以合并Lucene.NET索引吗
我为存档文件创建了许多Lucene.NET索引。可以合并Lucene.NET索引吗,.net,lucene,lucene.net,.net,Lucene,Lucene.net,我为存档文件创建了许多Lucene.NET索引。 索引是以相同的方式创建的。 索引不会更改,但每个索引需要几天才能完成。 我希望单个应用程序查询所有索引 我想知道是否有可能把这些索引合并成一个索引 我知道另一种方法是创建一个搜索应用程序,依次查询每个索引-但这不是我的首选选项,因为由于我无法在此解释的原因,它会引入大量维护开销。正如@DarkFalcon所评论的,索引合并工具也可用于.Net。看起来不管用。看起来像是Java Lucene 4.5.0或类似版本的自动端口,无法与当前版本的Luce
索引是以相同的方式创建的。
索引不会更改,但每个索引需要几天才能完成。 我希望单个应用程序查询所有索引 我想知道是否有可能把这些索引合并成一个索引
我知道另一种方法是创建一个搜索应用程序,依次查询每个索引-但这不是我的首选选项,因为由于我无法在此解释的原因,它会引入大量维护开销。正如@DarkFalcon所评论的,索引合并工具也可用于.Net。看起来不管用。看起来像是Java Lucene 4.5.0或类似版本的自动端口,无法与当前版本的Lucene.Net一起使用 然而,通过
IndexWriter
API合并索引实际上非常简单。你可以使用这个方法。只需在目标索引上打开一个writer,在每个要合并的索引上打开reader,将它们放入数组,然后调用该方法
就管理多个索引而言,您可以通过使用来更有效地搜索多个索引,而不是手动合并单独搜索的结果
以下是IndexMergeTool的一个版本,它实际上应该可以工作:
using System;
using Lucene.Net.Index;
using Lucene.Net.Store;
public class IndexMergeTool
{
public static void Main(string[] args)
{
if (args.Length < 3)
{
Console.Error.WriteLine("Usage: IndexMergeTool <mergedIndex> <index1> <index2> [index3] ...");
Environment.Exit(1);
}
FSDirectory mergedIndex = FSDirectory.Open(args[0]);
IndexWriter writer = new IndexWriter(mergedIndex, null, true, IndexWriter.MaxFieldLength.UNLIMITED);
IndexReader[] indexes = new IndexReader[args.Length - 1];
for (int i = 1; i < args.Length; i++)
{
indexes[i - 1] = IndexReader.Open(FSDirectory.Open(args[i]), true);
}
Console.WriteLine("Merging...");
writer.AddIndexes(indexes);
Console.WriteLine("Closing Readers...");
foreach (IndexReader index in indexes)
{
index.Dispose();
}
writer.Dispose();
Console.WriteLine("Done.");
}
}
使用系统;
使用Lucene.Net.Index;
使用Lucene.Net.Store;
公共类IndexMergeTool
{
公共静态void Main(字符串[]args)
{
如果(参数长度<3)
{
Console.Error.WriteLine(“用法:IndexMergeTool[index3]…”;
环境。出口(1);
}
FSDirectory mergedIndex=FSDirectory.Open(args[0]);
IndexWriter writer=新的IndexWriter(mergedIndex,null,true,IndexWriter.MaxFieldLength.UNLIMITED);
IndexReader[]索引=新的IndexReader[args.Length-1];
for(int i=1;i
5秒谷歌搜索:->由于我使用的是Lucene.net 2.9.2,所以对它进行了一些小的修改。我必须为FSDirectory.Open使用DirectoryInfo参数。谢谢