InitParams
solrconfig.xml
的 <initParams>
部分允许您在处理器配置之外定义请求处理器参数。
在以下几种情况下可能需要这样做
-
某些处理器在代码中隐式定义(请参阅隐式请求处理器),并且应该有一种方法可以添加、追加或覆盖某些隐式定义的属性。
-
有一些属性在多个处理器中使用。这有助于您只保留这些属性的单个定义,并将它们应用于多个处理器。
例如,如果您希望多个搜索处理器返回相同的字段列表,您可以创建一个 <initParams>
部分,而无需在每个请求处理器定义中定义相同的参数集。如果您有一个应该返回不同字段的请求处理器,您可以像往常一样在各个 <requestHandler>
部分中定义覆盖参数。
<initParams>
部分的属性和配置镜像了请求处理器的属性和配置。它可以包括 defaults、appends 和 invariants 部分,与任何请求处理器相同。
例如,这是 _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
部分中定义的参数。