我在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?恐怕会导致很大的性能损失。

最佳答案

Solr Server的标准配置不提供自动提交。如果您有solrconfig.xml文件,请查找带有注释的标签“ autoCommit”。如果不是这样,则在添加每个文档之后,您可以调用server.commit();,尽管对于大量文档而言,这可能会导致性能出现很大问题(因为commit是相对繁重的操作)。

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

关于java - SolrJ是否执行缓存?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7112046/

10-10 05:01