lucene SolrJ -启用身份验证插件时无法提交更新

bfrts1fy  于 2022-11-07  发布在  Lucene
关注(0)|答案(2)|浏览(191)

使用Solr 6.3.0,在云模式下,3个外部zookeepers作为集群,使用solrJ作为客户端。

A:不使用身份验证

在启用authentication之前,我使用以下代码添加/更新文档:

CloudSolrClient client = cloudClientBuilder.build();
    UpdateResponse resp = client.add(doc, 5000);
    client.commit();
    client.close();
    return resp;

它运行良好,新文档立即出现在搜索结果中。

B:启用身份验证

然后我启用了basic authentication pluginrule-based authorization plugin(如果有必要的话,还启用了SSL)。
为了设置credential信息,代码被重构如下:

// create request,
    UpdateRequest req = new UpdateRequest();

    // add doc to request,
    req.add(doc, 5000);

    // set credential,
    req.setBasicAuthCredentials(user, password);

    // create client,
    CloudSolrClient client = cloudClientBuilder.build();
    client.setDefaultCollection(ConfigUtil.getProp(ConfigUtil.KEY_SOLR_CORE));
    // do request & get response,
    UpdateResponse resp = req.process(client);

    client.commit();
    client.close();

然后它将得到类似如下的错误:
错误401需要验证,需要验证。
调试时,错误发生在client.commit();行。
"试着卷起来"
我使用curl进行更新:
curl -k --用户solr:密码“https://localhost:8983/solr/corexxx/update?wt=json&indent=true&commit=true“-d '[{“标识”:“20041”,“名称”:“xxx 41”,“位置”:“xxx”,“说明”:“xxx”}]'
已成功提交!并且,更新会立即显示在搜索结果中。
"我的猜测"
既然curl工作得很好,我猜solr cloud本身也工作得很好。
因此,该问题是由B中基于SolrJ的代码引起的。

问题:

  • 为什么代码B会出现HTTP 401错误?如何修复?
  • 我是否可以使用A中的代码,并且仍然能够提供凭据信息?如果可以,那么如何提供?
  • 谢谢-谢谢
lqfhib0f

lqfhib0f1#

您应该将client.commit()更改为req.commit(client, ConfigUtil.getProp(ConfigUtil.KEY_SOLR_CORE)),凭据在UpdateRequest中设置。

ryevplcw

ryevplcw2#

它是这样工作的:

SolrClient client = new HttpSolrClient.Builder(urlString).build();
        UpdateRequest up = new UpdateRequest();
        up.setBasicAuthCredentials(user, pass);
        up.add(doc1);
        up.process(client, core);
        up.commit(client, core);
        client.close();

相关问题