我正在尝试使用Solrj和特殊EmbeddedSolrServer
连接到Solr索引。我的solr.xml
看起来像这样:
<solr>
<cores adminPath="/admin/cores" defaultCoreName="db">
<core default="true" instanceDir="../db/" name="db"/>
</cores>
</solr>
对服务器执行查询命令时
CoreContainer coreContainer = new CoreContainer("C:\\development\\solr-4.4.0\\example tasks\\solr");
EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "db");
Collection<SolrCore> cores = coreContainer.getCores();
System.out.println(cores);
SolrQuery query = new SolrQuery();
query.setQuery("*:*");
query.addFacetField("taskType", "taskName");
QueryResponse rsp = server.query(query);
我得到以下异常:
Exception in thread "main" org.apache.solr.common.SolrException: No such core: db
db
核心在那里,当我使用Jetty和相同的solr.xml
文件启动Solr时,一切都很完美。
答案 0 :(得分:4)
评论后编辑:
在4.4.0版中,您需要使用load()
函数来加载核心。
CoreContainer coreContainer = new CoreContainer("C:\\development\\solr-4.4.0\\example tasks\\solr");
container.load();
如果您还没有看过solr wiki for EmbeddedSolrSever,请查看。
我希望它能解决你的问题。
答案 1 :(得分:0)
从Solr 4.4开始,有一个使用核心目录和core.properties文件发现的备用核心定义方法。从Solr 5.0开始,此方法是强制性的。
注意:您需要将solr.xml中的核心定义迁移到新方法。 有关详细信息,请参阅Solr.xml 4.4 and beyond
答案 2 :(得分:0)
这主要发生在 EmbeddedSolrServer
无法找到核心时。通常是因为 core.properties
文件丢失(查看 Solr configuration files)。
我编写了一个 Java 示例,帮助您编写自己的测试配置、加载数据和运行 junit 测试。