2011-08-18 126 views
2

我在我的web应用程序中使用Solr作为搜索引擎。我使用DataImportHandler自动将数据库中的数据导入搜索索引。当DataImportHandler添加新数据时,数据已成功添加到索引,但在使用SolrJ查询索引时不会返回数据:我必须重新启动我的应用程序服务器才能找到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

SolrJ不缓存。我对DIH不熟悉 - 但是你确定你正在提交?最后 - 你可能会在[email protected]上得到更多的开发人员的爱。 –

回答

0

Solr Server的标准配置不提供自动提交功能。如果您有solrconfig.xml文件,请查找注释的标签“autoCommit”。如果不是这样,那么在添加每个文档后,您可以拨打server.commit();,尽管有大量文档可能会导致性能问题(因为commit的操作比较繁重)。

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

+0

似乎与commit方法没有关系 - 我有数据提交,但查询仍然返回相同的结果,即使我已经禁用了solrconfig中的缓存.xml(filterCache,queryResultsCache和documentCache)。 – mvmn