0

我将 SOLR 4 用于应用程序,我需要在插入记录后立即搜索索引。

我正在使用下面的 solrj 代码来获取索引中的最后一个 ID。但是,我注意到当我通过 solr web admin 执行查询时看到的最后一个 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)在其他字段(在本例中为文本)之前变得可搜索?

4

1 回答 1

0

你是如何提交索引的?您应该将 commit 与waitSearcher=trueand一起使用,waitFlush=true以便它阻塞,直到新的搜索器可用于使用 Solrj 提交进​​行查询。

否则,在提交和打开新搜索器之间会有一些延迟,新索引可用。到那时,搜索将由具有旧数据的旧搜索执行。

于 2012-12-20T06:50:17.807 回答