如何将 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 )"。
我正在为我的 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 )"。