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
部分中定义的参数。