gpt4 book ai didi

.net - 是否可以合并 Lucene.NET 索引

转载 作者:行者123 更新时间:2023-12-01 04:59:15 24 4
gpt4 key购买 nike

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

我想知道是否可以将这些索引合并为一个索引?

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

最佳答案

@DarkFalcon 评论的索引合并工具也可用于 .Net,see here .看起来不行。看起来像是 Java Lucene 4.5.0 或类似的自动移植,并且不适用于当前版本的 Lucene.Net。

但是,通过 IndexWriter 合并索引实际上非常简单。 API。您可以使用 IndexWriter.AddIndexes 方法。只需在目标索引上打开一个写入器,在每个要合并的索引上打开读取器,将它们放入一个数组中,然后调用该方法。

至于管理多个索引,您可以通过使用 MultiReader 更有效地搜索多个索引。 ,而不是手动合并单独搜索的结果。

这是一个应该实际工作的 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.");
}
}

关于.net - 是否可以合并 Lucene.NET 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com