2

Web アプリケーションで Solr を検索エンジンとして使用しています。DataImportHandler を使用して、データベースから検索インデックスにデータを自動的にインポートします。DataImportHandler が新しいデータを追加すると、データはインデックスに正常に追加されますが、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 は static として宣言されています。代わりに、クエリごとに新しい EmbeddedSolrServer を作成する必要がありますか? パフォーマンスが大幅に低下するのではないかと心配しています。

4

1 に答える 1

0

Solr Server の標準構成では、自動コミットは提供されません。solrconfig.xml ファイルがある場合は、コメント付きのタグ「autoCommit」を探します。そうでない場合は、各ドキュメントが追加された後に を呼び出すことができますがserver.commit();、ドキュメントのストリームが大きい場合、これは大きなパフォーマンスの問題になる可能性があります (commit比較的負荷の高い操作と同様)。

Web アプリケーションで使用している場合は、デプロイで EmbeddedSolrServer の代わりに solr-xxwar を使用することをお勧めします。これにより、インデックスを更新、管理、検索するための豊富な Http インターフェイスが提供されます。

于 2012-03-29T11:19:33.183 に答える