2

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

4

1 回答 1

0

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

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

于 2012-03-29T11:19:33.183 回答