在SolrJ中有两种SolrServer的具体实现:HttpSolrServer, EmbeddedSolrServer.
- HttpSolrServer通常是用于对部署在web container中的solr instance发起query/index请求;
- EmbeddedSolrServer无需web container, 可以嵌入到任何Java 应用程序中,而且不需要引入Solr webapp依赖的众多的jars.
EmbeddedSolrServer适合对集成Solr功能的Java 应用程序做单元/集成测试。 EmbeddedSolrServer能够实现HttpSolrServer的大部分功能,它们继承了来自SolrServer的相同接口。
测试发现:
1. EmbeddedSolrServer 在实例化时需要指定solr.solr.home 环境变量,初始化solr core成功后,即可查询core中的index
System.setProperty("solr.solr.home", "F:/SolrHomeN");
final CoreContainer container = new CoreContainer();
container.load();
server = new EmbeddedSolrServer(container, "runlog");
2. 在使用EmbeddedSolrServer情况下,使用data import handler构建索引遇到麻烦, 索引更新不成功
网上的示例代码:
final ModifiableSolrParams params = new ModifiableSolrParams();
params.set("qt", "/dataimport");
params.set("command", "full-import");
params.set("clean", "true");
params.set("commit", "true");
server.query(params);
解决办法:增加debug=true参数后,更新成功。但不明白具体缘由。
params.set("debug", "true");
注意:上述代码片段在HttpSolrServer的情况下,工作正常。