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

どのようにインデックスをコミットしていますか? 新しいサーチャーが Solrj commit を使用してクエリを実行できるようになるまでブロックするように、 waitSearcher=trueandを使用して commit を使用する必要があります。waitFlush=true

そうしないと、コミットと新しいサーチャーが開かれ、新しいインデックスが利用可能になるまでに多少の遅延が発生します。それまでは、古いデータを持つ古い検索によって検索が実行されます。

于 2012-12-20T06:50:17.807 に答える