我在四个不同的网络应用中使用Lucene
来搜索商品。当我需要更改Lucene
如何搜索或添加功能时,我必须构建所有四个应用程序。我希望搜索部分与网络应用程序分开。我很好奇最好的方法。
我不想使用网络服务。我们已经有了一个Web服务应用程序,实际上是使用lucene搜索的应用程序之一。
我需要做的就是返回以搜索匹配的itemkeys
逗号分隔列表(或巨型String
)。它应该是Java,因为其他一切都是。我只是不确定实现可能是一个单独的应用程序,它返回XML或JSON
或某些JMS
。
答案 0 :(得分:0)
明显的可能性是:
只需使用solr,它有许多比你可能需要的东西,但它很容易设置,并且易于使用,也许以后你很高兴你有它提供的其他可能性...
查看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)执行所有这些操作。