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