我在我的网络应用程序中使用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吗?我担心这会导致很大的性能损失。
答案 0 :(得分:0)
Solr Server的标准配置不提供自动提交。如果您有solrconfig.xml文件,请查找注释标记“autoCommit”。如果没有,那么在添加每个文档之后,您可以调用server.commit();
,尽管有大量文档,这可能是一个很大的性能问题(因为commit
操作相对较重)。
如果您在Web应用程序中使用它,我建议您在部署中使用solr-x.x.war而不是EmbeddedSolrServer。这将为您提供丰富的Http界面,用于更新,管理和搜索索引。