2012-12-20 63 views
0

我正在使用SOLR 4作爲應用程序,我需要在插入記錄後儘快搜索索引。查找SOLR中最後一個可搜索文檔的關鍵4

我正在使用下面的solrj代碼來獲取索引中的最後一個ID。但是,我注意到當我通過solr web管理器執行查詢時,我看到的最後一個ID往往落後於此。而且,直到我從下面的代碼片段獲得的最後一個ID,我的搜索纔會包含所有文檔。這是因爲硬承諾的延誤?我不需要切換到軟提交。我只是想確保我得到最後一個可搜索文檔的ID。這可能嗎?

 SolrQuery query = new SolrQuery(); 
    query.set("qt","/select"); 
    query.setQuery("*:*"); 
    query.setFields("id"); 
    query.set("rows","1"); 
    query.set("sort","id desc"); 

    QueryResponse rsp = m_Server.query(query); 
    SolrDocumentList docs = rsp.getResults(); 
    SolrDocument doc = docs.get(0); 
    long id = (Long) doc.getFieldValue("id"); 

更新:在下列方式solrj
我犯文件:

m_Server = new HttpSolrServer(m_Url); 
    SolrInputDocument doc = new SolrInputDocument(); 
    doc.addField("id", id); 
    doc.addField("text", text); 
    m_Server.add(doc);  
    m_Server.commit(); 

有沒有可能是某些字段(ID,在這種情況下)在別人面前成爲搜索(文字, 在這種情況下)?

回答

0

你是如何提交索引的? 您應該使用waitSearcher=truewaitFlush=true的提交,以便它阻塞,直到新的搜索器可用於使用Solrj提交進行查詢。

否則,在Commits和New Searcher之間會出現一些延遲,並且New Index可用。直到那時搜索將被舊數據執行。

+0

謝謝。我已經更新了這篇文章,告訴我如何對索引做出承諾。 – Joe

+0

我可以在solrj中設置waitSearcher和waitFlush選項嗎?還是需要用新的配置設置重新啓動solr? – Joe

+0

根據此頁面:http://wiki.apache.org/solr/UpdateXmlMessages默認情況下waitSearch爲true,waitFlush「沒有任何影響」。 – Joe

相關問題