分开搜索功能

时间:2014-01-06 21:14:48

标签: java search lucene

我在四个不同的网络应用中使用Lucene来搜索商品。当我需要更改Lucene如何搜索或添加功能时,我必须构建所有四个应用程序。我希望搜索部分与网络应用程序分开。我很好奇最好的方法。
我不想使用网络服务。我们已经有了一个Web服务应用程序,实际上是使用lucene搜索的应用程序之一。

我需要做的就是返回以搜索匹配的itemkeys逗号分隔列表(或巨型String)。它应该是Java,因为其他一切都是。我只是不确定实现可能是一个单独的应用程序,它返回XML或JSON或某些JMS

3 个答案:

答案 0 :(得分:0)

明显的可能性是:

  1. 只需使用solr,它有许多比你可能需要的东西,但它很容易设置,并且易于使用,也许以后你很高兴你有它提供的其他可能性...

  2. 查看this issue in lucene,其中包括在普通Lucene中创建搜索服务器。所以你可以避免solr。

答案 1 :(得分:0)

您可以将搜索功能分离到"搜索服务器"。如果您不想使用solr,您可以自己轻松地将此功能添加到代码中。

我不清楚你对网络服务的确切含义,但某种类型的远程访问"当然必须使用技术。

您可以使用REST界面(例如球衣库),您可以在其中定义http://serverx.host.domain/search?query=xy之类的路径来访问该服务。

或者您可以使用某种RPC机制(例如http://hessian.caucho.com/)来透明地调用远程Java方法。然后,您可以使用服务的URL实例化客户端界面并使用搜索服务,因为它将是一个本地接口,如

String result = searchserver.search("xy");

当然,有无穷无尽的可能性。

生成的应用程序可以部署在像tomcat这样的Web容器中,或者如果你想拥有一个可运行的jar,你可以使用像jetty这样的嵌入式web容器。

答案 2 :(得分:0)

我会再给你一个关于这个问题的观点,因为我不认为这个问题与Lucene本身有关,而是你可以在应用程序之间共享任何通用代码。

我会单独为每个应用程序编写版本,因为它们似乎有不同的生命周期导致您的问题。另外,我会在一个单独的jar文件(例如Lucene和其他一些常见类)中对公共代码进行版本控制,因此每次必须为特定应用程序更改它时,您都可以修改和发布新版本。

例如,假设一开始所有版本的应用程序都使用相同版本的公共代码(考虑名称的最后部分版本):

  • first-app-1.0消费lucene-something-1.0
  • second-app-1.0消费lucene-something-1.0
  • third-app-1.0消费lucene-something-1.0
  • fourth-app-1.0消费lucene-something-1.0

现在假设我需要修改lucene-something-1.0才能为third-app-1.0提供新功能。我将发布lucene-something-1.1,并将其用于third-app-1.1(新版本),将模块之间的依赖关系保留为:

  • first-app-1.0消耗lucene-something-1.0(未更改)
  • second-app-1.0消耗lucene-something-1.0(未更改)
  • third-app-1.1消费lucene-something-1.1
  • fourth-app-1.0消耗lucene-something-1.0(未更改)

正如您所看到的,其他应用程序将继续工作,因为我没有更改它们。您拥有third-app的新功能,并且在lucene-something的代码库中有一个“基线”,现在包含一个很好的功能,可用于将来可能发布的其他应用程序。

最后,我会借助构建工具(例如Maven)执行所有这些操作。