可以合并Lucene.NET索引吗

可以合并Lucene.NET索引吗,.net,lucene,lucene.net,.net,Lucene,Lucene.net,我为存档文件创建了许多Lucene.NET索引。 索引是以相同的方式创建的。 索引不会更改,但每个索引需要几天才能完成。 我希望单个应用程序查询所有索引 我想知道是否有可能把这些索引合并成一个索引 我知道另一种方法是创建一个搜索应用程序,依次查询每个索引-但这不是我的首选选项,因为由于我无法在此解释的原因,它会引入大量维护开销。正如@DarkFalcon所评论的,索引合并工具也可用于.Net。看起来不管用。看起来像是Java Lucene 4.5.0或类似版本的自动端口,无法与当前版本的Luce

我为存档文件创建了许多Lucene.NET索引。
索引是以相同的方式创建的。
索引不会更改,但每个索引需要几天才能完成。 我希望单个应用程序查询所有索引

我想知道是否有可能把这些索引合并成一个索引


我知道另一种方法是创建一个搜索应用程序,依次查询每个索引-但这不是我的首选选项,因为由于我无法在此解释的原因,它会引入大量维护开销。

正如@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参数。谢谢