2014-01-06 50 views
0

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

我需要做的只是返回一个由搜索匹配的itemkeys的逗号分隔列表(或者一个巨大的String)。它应该在Java中,因为其他所有东西都是。我只是不确定实施可能是一个单独的应用程序,返回XML或JSON或一些JMS

回答

0

明显的可能性是:

  1. 只是去与solr,它有很多事情可能比你所需要的,但它很容易设置和易于使用的,也许以后你很高兴你有它提供的那些其他可能性...

  2. 看看this issue in lucene涵盖创建一个简单的Lucene搜索服务器。所以你可以避免solr。

0

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

目前还不清楚你对web服务的确切含义,但当然必须使用某种“远程访问”技术。

您可以使用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容器。

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