Solr更新更快的solrj或curl

时间:2016-05-25 10:34:32

标签: solr solrj

我有一个案例,我有一组要在solr中更新的字段。我收到的输入是地图的形式,键是字段名称,值是更新的值。 我怀疑在这种情况下我应该使用curl来更新doc或solrj,我必须将map转换为solrInputDocument,然后调用add命令。第一种方法会比第二种更快吗?

1 个答案:

答案 0 :(得分:1)

  • 您可以将地图转换为SolrInputdocument。

  • Curl使用HTTP URL。所有请求都转到HttpSolrServer(我不太确定)。 但是,根据我的经验,我强烈建议 ConcurrentUpdateSolrServer用于更新

SolrJ有ConcurrentUpdateSolrServer类,如下所述。

  

ConcurrentUpdateSolrServer缓冲所有添加的文档并写入它们   进入开放的HTTP连接。这个类是线程安全的。来自的参数   UpdateRequest转换为http请求参数。当params   在UpdateRequests之间切换,启动新的HTTP请求。虽然   可以使用此实现进行任何SolrServer请求   仅建议将ConcurrentUpdateSolrServer与/ update一起使用   要求。 HttpSolrServer类更适合查询   接口

以下是获取Solr Server实例的示例方法

/**
     * Method lookUpConcurrentUpdateSolrServerInstance.
     * 
     * @param baseURL String
     * @param collection String
     * @return ConcurrentUpdateSolrServer
     * @throws SolrServerException
     * @throws IOException
     * @throws Exception
     */
    public static ConcurrentUpdateSolrClient lookUpConcurrentUpdateSolrServerInstance(String baseURL, String collection)
                    throws SolrServerException, IOException, Exception {

        ConcurrentUpdateSolrClient solrServer = null;
        if (StringUtils.isNotBlank(baseURL) && StringUtils.isNotBlank(collection)) {

            solrServer = new ConcurrentUpdateSolrClient(baseURL + collection, "queueSizeasInteger", 10), 
                            "threadCount as integer", 10));
            checkServerStatus(solrServer);
            return solrServer;
        }

        return solrServer;
    }