如何将 Servlet 与 Apache Solr 服务一起使用

How to use Servlet together with Apache Solr service

我正在为我的 Web 应用程序使用 Java EE 技术。我使用 Apache Solr 作为我的搜索引擎。 AFAIK,在我成功配置 Solr 之后,Solr 是 运行 作为 Restful 服务。

因此,在我的 servlet 下,我尝试将此服务称为我以前使用的另一个控制台应用程序。这是一个示例代码,用于从 url:

中获取 json 数据
 /** Get Data Fom URL Using GET Method */
    public static String getResponseFromGetRequest(String url) {
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);

        /** after prepare for data. prepare for sending */
        try {
            /**
             * HttpResponse is an interface just like HttpGet
             * therefore we can't initialize them
             */
            HttpResponse httpResponse = httpClient.execute(httpGet);
            return parseHttpResponse(httpResponse);

        } catch (ClientProtocolException ex) {
            ex.printStackTrace();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return null;
    }

但是包 org.apache.http.impl.client.DefaultHttpClient 不可用(至少在 tomcat 服务器下)。所以,我认为这里可能存在一些问题。我们不能在 servlet 中调用另一个服务,对吗?如果我的猜测是真的,我该如何解决这个问题?

关于使用 java 中可用的 API 与 solr 交互的简短代码(您不需要了解或关心 servlets、httpclients,什么都不需要)。

HttpSolrServer server = new HttpSolrServer("your restful url goes here");
    SolrQuery query = new SolrQuery();
    QueryResponse response = server.query(query);
    List<MyClass> beans = response.getBeans(MyClass.class);

server 可能应该是一个 spring bean,它是 运行ning solr 服务器的 java 表示(代理对象)。

query 是对服务器 运行 的查询,配置它以指定你想要从 solr.

response 是请求的答案。 beans 是直接来自 solr 本身的对象(据我所知,您的 solr 字段通过字段名称映射到 java 对象的字段,完全没有限制)。

请注意 server 有很多方法可以在没有任何明确说明的情况下执行简单操作,例如 server.addBean(myBean);

这里是如何在 maven 中获取 Solrj:

    <dependency>
        <groupId>org.apache.solr</groupId>
        <artifactId>solr-solrj</artifactId>
        <version>4.5.1</version>
    </dependency>

如果你没有maven:

http://mvnrepository.com/artifact/org.apache.solr/solr-solrj/4.10.3

点击 "Download ( JAR )"。