SolrJ是否执行缓存?

时间:2011-08-18 18:11:09

标签: java solr solrj

我在我的网络应用程序中使用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吗?我担心这会导致很大的性能损失。

1 个答案:

答案 0 :(得分:0)

Solr Server的标准配置不提供自动提交。如果您有solrconfig.xml文件,请查找注释标记“autoCommit”。如果没有,那么在添加每个文档之后,您可以调用server.commit();,尽管有大量文档,这可能是一个很大的性能问题(因为commit操作相对较重)。

如果您在Web应用程序中使用它,我建议您在部署中使用solr-x.x.war而不是EmbeddedSolrServer。这将为您提供丰富的Http界面,用于更新,管理和搜索索引。