2011-08-18 68 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