InitParams

solrconfig.xml<initParams> 部分允许你在处理程序配置之外定义请求处理程序参数。

在以下几种情况下,可能需要这样做

  • 某些处理程序在代码中隐式定义(请参阅 隐式请求处理程序),应该有一种方法来添加、附加或覆盖某些隐式定义的属性。

  • 有一些属性在处理程序之间使用。这有助于你只保留这些属性的单个定义,并在多个处理程序中应用它们。

例如,如果你希望多个搜索处理程序返回相同的字段列表,则可以创建一个 <initParams> 部分,而无需在每个请求处理程序定义中定义相同的一组参数。如果你有一个应该返回不同字段的单个请求处理程序,则可以像往常一样在各个 <requestHandler> 部分中定义覆盖参数。

<initParams> 部分的属性和配置反映了请求处理程序的属性和配置。它可以包含默认值、附加项和不变项的部分,与任何请求处理程序相同。

例如,以下是 _default 示例中默认定义的 <initParams> 部分之一

<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell">
  <lst name="defaults">
    <str name="df">_text_</str>
  </lst>
</initParams>

这会将默认搜索字段(“df”)设置为路径部分中命名的所有请求处理程序的“text”。如果我们稍后希望更改 /query 请求处理程序以默认搜索其他字段,我们可以通过在 /query<requestHandler> 部分中定义参数来覆盖 <initParams>

语法和语义与 <requestHandler> 类似。以下是属性

path

可选

默认值:无

将使用参数的路径的逗号分隔列表。可以在路径中使用通配符来定义嵌套路径,如下所述。

name

可选

默认值:无

此参数集的名称。如果未明确命名路径,则可以在 requestHandler 定义中直接使用该名称。如果为 <initParams> 命名,则可以在未定义为路径的 <requestHandler> 中引用参数。

例如,如果 <initParams> 部分的名称为“myParams”,则可以在定义请求处理程序时调用该名称

<requestHandler name="/dump1" class="DumpRequestHandler" initParams="myParams"/>

initParams 中的通配符

<initParams> 部分可以支持通配符,以定义应使用已定义参数的嵌套路径。单个星号(*)表示应使用更深一层嵌套路径的参数。双星号(**)表示无论深度如何,所有嵌套路径都应使用参数。

例如,如果我们有一个类似这样的 <initParams>

<initParams name="myParams" path="/myhandler,/root/*,/root1/**">
  <lst name="defaults">
    <str name="fl">_text_</str>
  </lst>
  <lst name="invariants">
    <str name="rows">10</str>
  </lst>
  <lst name="appends">
    <str name="df">title</str>
  </lst>
</initParams>

我们在示例的第一行中定义了三条路径

  • /myhandler 声明为直接路径。

  • /root/* 带有一个星号,表示参数应应用于深度为一级的路径。

  • /root1/** 带有双星号,表示参数应应用于所有嵌套路径,无论深度如何。

当我们定义请求处理程序时,通配符将以以下方式工作

<requestHandler name="/myhandler" class="SearchHandler"/>

/myhandler 类在 <initParams> 中被命名为路径,因此这将使用这些参数。

接下来,我们有一个名为 /root/search5 的请求处理程序

<requestHandler name="/root/search5" class="SearchHandler"/>

我们为比 /root 深一层级的嵌套路径定义了一个通配符,因此此请求处理程序将使用参数。但是,此请求处理程序不会使用参数,因为 /root/search5/test/root 深一层级

<requestHandler name="/root/search5/test" class="SearchHandler"/>

如果我们想要定义所有级别的嵌套路径,我们应该使用双星号,如示例路径 /root1/**

<requestHandler name="/root1/search/tests" class="SearchHandler"/>

/root1 下的任何路径(无论是否在请求处理程序中明确定义)都将使用匹配的 initParams 部分中定义的参数。