使用 API 更改 SolrCloud 中的默认查询字段

Change default query fields in SolrCloud using the API

我正在使用SolrCLoud 来搜索具有多个属性的文档。在我的应用程序中,如果查询未指定任何特定字段,我想搜索所有字段,例如 term1 AND term2 查询应在所有字段中搜索该组合。

阅读 documentation 看起来您可以为搜索定义一个默认字段。

我发现 examples 更改搜索处理程序的默认构面, 但不适用于默认搜索字段,不适用于查询处理程序上的默认搜索字段。

有谁知道如何使用 Solr API 来更改 QueryHandler 中的默认字段?

您可以使用 Config API 修改您的默认字段和默认操作员配置。

例如,您可以添加它创建一个新的 initParams

curl http://localhost:8983/solr/films/config -H 'Content-type:application/json' -d '{
      "add-initparams" : { name : "my-init", "path" : "/select,/browse", 
           "defaults":{ "df":"term1 term2" ,"q.op":"AND" }
      } }'

此配置将保存在configoverlay.json

但我通常不喜欢使用 ConfigAPI 并将默认配置直接保存在 solrconfig.xml 文件中。从长远来看,这将导致更清晰的配置。

例如,以下配置适用于您定义的几个请求处理程序:

<initParams path="/select,/get,standard">
   <lst name="defaults">
      <str name="df">term1 term2</str>
      <str name="q.op">AND</str>
   </lst>
</initParams>

如您所见,我已经定义了 df (default fields) and q.op(默认运算符)。

请注意,对于早于 Solr5 的 Solr(或 SolrCloud)版本,这些配置参数位于 schema.xml 文件中。

看看Major changes in Solr 7

您可以使用 Java 代码更新如下属性。前任。你想更新 autoCommit 和 autoSoftCommit 属性.

Map<String, String> props= new HashMap<>();
props.put("solr.autoCommit.maxTime", 10000);
props.put("solr.autoSoftCommit.maxTime", 15000);

StringBuilder command = new StringBuilder("{\"set-property\": {");
   for (Map.Entry<String, String> entry: props.entrySet())
   {
      command.append('"').append(entry.getKey()).append('"').append(':');
      command.append(entry.getValue()).append(',');
   }
   command.setLength(command.length()-1); // remove last comma
   command.append("}}");

   GenericSolrRequest rq = new GenericSolrRequest(SolrRequest.METHOD.POST, "/config", null);
   ContentStream content = new ContentStreamBase.StringStream(command.toString());
   rq.setContentStreams(Collections.singleton(content));
   rq.process(solrClient);