我在我的web应用程序中使用Solr作为搜索引擎。我使用DataImportHandler自动将数据库中的数据导入到搜索索引中。当DataImportHandler添加新数据时,数据被成功地添加到索引中,但是当我使用SolrJ查询索引时没有返回数据:我必须重新启动应用服务器才能通过SolrJ找到数据。有没有在进行某种缓存?我在嵌入式模式下使用了SolrJ。下面是我的SolrJ代码:
private static final SolrServer solrServer = initSolrServer();
private static SolrServer initSolrServer() {
try {
CoreContainer.Initializer initializer = new CoreContainer.Initializer();
coreContainer = initializer.initialize();
EmbeddedSolrServer server = new EmbeddedSolrServer(coreContainer, "");
return server;
} catch (Exception ex) {
logger.log(Level.SEVERE, "Error initializing SOLR server", ex);
return null;
}
}然后,为了查询,我执行以下操作:
SolrQuery query = new SolrQuery(keyword);
QueryResponse response = solrServer.query(query);如您所见,我的SolrServer被声明为静态的。我应该为每个查询创建一个新的EmbeddedSolrServer吗?我担心这会导致很大的性能损失。
发布于 2012-03-29 19:19:33
Solr Server的标准配置不提供自动提交。如果您有solrconfig.xml文件,请查找注释标记"autoCommit“。如果没有,那么在添加每个文档之后,您可以调用server.commit();,尽管对于大文档流,这可能会证明这是一个很大的性能问题(因为commit是相对繁重的操作)。
如果您在web应用程序中使用它,我建议在您的部署中使用solr-x.x.war,而不是EmbeddedSolrServer。这将为您提供丰富的Http界面,用于更新、管理和搜索索引。
https://stackoverflow.com/questions/7112046
复制相似问题