Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 异步搜索_Hibernate_Search_Lucene_Hibernate Search - Fatal编程技术网

Hibernate 异步搜索

Hibernate 异步搜索,hibernate,search,lucene,hibernate-search,Hibernate,Search,Lucene,Hibernate Search,我目前正在使用Lucene和Hibernate搜索为我的公司构建一个概念验证搜索解决方案。我已经建立了工作良好的个别组件。我现在正在考虑创建一个API,允许用户从不同的来源(域+数据)获取搜索结果。我想实现的是,搜索管理器异步向不同的搜索组件发出搜索请求,当处理完一组结果时,在处理其余结果的同时将该结果返回给用户。搜索结果处理完毕后,通知客户端有更多搜索结果可用 我想知道我是否有一个搜索管理器,它可以创建单独的线程来搜索各个搜索组件,并保存搜索结果列表。一旦列表填充了一个集合,就返回给用户。添加

我目前正在使用Lucene和Hibernate搜索为我的公司构建一个概念验证搜索解决方案。我已经建立了工作良好的个别组件。我现在正在考虑创建一个API,允许用户从不同的来源(域+数据)获取搜索结果。我想实现的是,搜索管理器异步向不同的搜索组件发出搜索请求,当处理完一组结果时,在处理其余结果的同时将该结果返回给用户。搜索结果处理完毕后,通知客户端有更多搜索结果可用

我想知道我是否有一个搜索管理器,它可以创建单独的线程来搜索各个搜索组件,并保存搜索结果列表。一旦列表填充了一个集合,就返回给用户。添加的任何其他搜索结果都会涉及到搜索经理将结果推送给用户

我不寻找任何代码示例(任何示例都可以),但我想知道是否可以获得一些关于如何解决此问题的指导。我是使用事件处理技术(GigaSpaces、Spring、JMS)还是使用标准Java并发库。管理列表和推送更新结果的有效方法是什么


干杯

如果您为每种类型的搜索管理器创建了一个类,例如Lucene,其中每种都实现了一个异步搜索接口,您应该能够仅使用“普通”Java内容

我会考虑以下几点:

创建一个线程安全的集合(如果您不希望重复搜索,则创建一个集合),该集合具有正确的属性,具体取决于您是否希望排序、是否将随机访问其中的数据或只是在其中进行迭代。通常使用哪种数据结构

与以集合为参数的运行搜索方法的接口-可能是另一个检查搜索是否已终止的方法。或者其他一些基于侦听器的方法,不管你喜欢什么方法

为每个不同的搜索方法实现该接口。每个搜索方法调用都会在运行搜索的调用上创建自己的线程,该线程会将搜索结果放入提供的集合中

Search manager只需迭代所有已知的搜索引擎(在某处注册),并使用给定的查询对每个搜索引擎进行搜索


希望能有所帮助。

这听起来非常适合Java5及更高版本的抽象。您可以将任务提交到执行器线程池,并异步轮询以完成任务

因此,在您的情况下,您应该将每个搜索创建为它自己的任务,然后轮询这些任务以完成。完成后,抓取结果并为用户聚合它们。

我将研究这种模式:使用JMS(或其他消息传递技术)异步广播查询,收集响应,直到达到超时或返回最小数量的搜索结果,然后向最终用户报告到目前为止的结果

使用JMS或类似工具的好处是,可以避免占用多个线程等待响应,并且可以使用一种机制来处理在第一个结果集返回给用户之后到达的响应

您可能需要研究基于Lucene的开源企业搜索服务器,以及它们如何处理这些问题。

在这种情况下,“客户端”是什么?它是Java应用程序、基于浏览器的web应用程序等吗?