gpt4 book ai didi

c# - Lucene.Net 并行搜索

转载 作者:行者123 更新时间:2023-11-30 21:37:47 25 4
gpt4 key购买 nike

我正在用 C# 创建一个基于 Lucene.Net 的搜索引擎应用程序,它只有一个索引。作为一项要求,我需要为具有多个 (5) 查询的测试运行优化运行时。因此,我想为每个搜索使用一个单独的线程,返回类似于 this 的结果。邮政。我的代码如下所示:

// load information needs
List<InformationNeed> informationNeeds = FileReader.readInformationNeeds(collectionPath);

// each search has its own thread referenced in this list
List<Thread> threadList = new List<Thread>();

// each search has its own result referenced in this list
List<SearchResult> searchResults = new List<SearchResult>();


foreach (InformationNeed informationNeed in informationNeeds){

// create searchOptions
SearchOptions searchOptions = new SearchOptions(DEBUG_pre_processQuery, informationNeed.getInput());

// run search
SearchResult result = null; // Used to store the return value
var thread = new Thread(
() =>
{
result = startSearch(searchOptions);
Console.WriteLine("end search for IN nr " + informationNeed.getID() + "results = " + result);

//add results to list
searchResults.Add(result);

});
thread.Start();
threadList.Add(thread);
}

// block main thread until all threads finished
foreach (Thread t in threadList){
t.Join();
}

return searchResults;

但是,我得到了一个 Lucene.Net.QueryParser.ParseException see screenshot我在按顺序运行搜索时没有得到。

如果我说不清楚,请发表评论。如果能就此问题提供任何帮助,我将不胜感激。

最佳答案

您需要同步访问 searchResults或者多个线程会同时修改它。或者您可以使用异步模式并返回 Task<SearchResult>从你的异步方法而不是使用相同的 List对于每个线程。

另外,声明 SearchResult result线程之外只是以与searchResults 相同的方式自找麻烦。造成麻烦。在线程内声明它。

关于c# - Lucene.Net 并行搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46859792/

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