Java 分离搜索功能

Java 分离搜索功能,java,search,lucene,Java,Search,Lucene,我在四个不同的web应用程序中使用Lucene来搜索项目。当我需要更改Lucene搜索方式或添加功能时,我必须构建所有四个应用程序。我希望搜索部分与web应用程序分开。我对最好的方法很好奇我不想使用web服务。我们已经有了一个web服务应用程序,它实际上是使用lucene搜索的应用程序之一 我所需要做的就是返回一个由搜索匹配的itemkeys逗号分隔的列表(或一个巨大的字符串)。它应该是Java的,因为其他的都是Java。我只是不确定它的实现可能是一个返回XML或JSON或一些JMS的单独应用程

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


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

显而易见的可能性是:

  • 就这样吧,它有很多你可能不需要的东西,但是它很容易设置,也很容易使用,也许以后你会很高兴你有了它提供的其他可能性

  • 看一看在PlainLucene中创建搜索服务器的内容。所以你可以避免solr


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

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

    您可以使用REST接口(例如jersey library),在该接口中可以定义访问服务的路径,如

    或者可以使用某种RPC机制(例如)透明地调用远程java方法。然后,您可以使用服务的url实例化客户机接口,并使用搜索服务,因为它是一个本地接口,如

    String result = searchserver.search("xy");
    
    当然,有无限的可能性


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

    我会给你另一个关于这个问题的观点,因为我认为这个问题与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
      (未更改)
    如您所见,其他应用程序将继续工作,因为我没有更改它们。你有了第三个应用程序的新功能,并且在lucene something的代码库中有了一个“基线”,它现在包含了一个很好的功能,可以在将来发布其他应用程序

    最后,我将在构建工具的帮助下执行所有这些,例如