solr 8.2 使用 df 跨字段搜索
solr 8.2 search across fields with df
我有一个包含 5 个字段的集合,比如 a、b、c、d、e。目前它的工作方式类似于 q=a:value 但我想跨字段搜索(如 q=value)
我在 solrConfig.xml 中尝试了以下内容,但没有 luck.Appreciate 任何指示
<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
<lst name="defaults">
<str name="df">text1</str>
</lst>
<copyField source="a" dest="text1" indexed="true" stored="true"/>
<copyField source="b" dest="text1" indexed="true" stored="true"/>
<copyField source="c" dest="text1" indexed="true" stored="true"/>
<copyField source="d" dest="text1" indexed="true" stored="true"/>
<copyField source="f" dest="text1" indexed="true" stored="true"/>
</initParams>
<fields>
<copyField source="a" dest="text1" indexed="true" stored="true"/>
<copyField source="b" dest="text1" indexed="true" stored="true"/>
<copyField source="c" dest="text1" indexed="true" stored="true"/>
<copyField source="d" dest="text1" indexed="true" stored="true"/>
<copyField source="f" dest="text1" indexed="true" stored="true"/>
</fields>
您可以使用名为 "text1" 的复制字段,将所有可搜索字段复制到此字段并将其指定为默认搜索字段。
<requestHandler name="/select" class="solr.SearchHandler">
<!-- default values for query parameters can be specified, these
will be overridden by parameters in the request
-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text1</str>
在schema.xml
中添加字段
<fields>
<field name="a" type="string" indexed="true" stored="true" required="true" />
<field name="b" type="string" indexed="true" stored="true" required="true" />
.
.
<field name="text1" type="text" indexed="true" stored="false" multiValued="true" />
</fields>
您可以将要复制的字段添加到复制字段,如下所示:
<copyField source="a" dest="text1"/>
<copyField source="b" dest="text1"/>
...
<copyField source="e" dest="text1"/>
使用 the edismax
query parser 并提供 qf
参数。它还可以让您以不同的方式提高每个领域的点击率。 qf=a^5 b
将给予 a
字段中的命中比 b
字段中的命中高五倍的权重。
由于字段规范现在位于 qf
参数中,因此 q
参数可以用作更简单的用户键入查询 - q=foo bar
.
我有一个包含 5 个字段的集合,比如 a、b、c、d、e。目前它的工作方式类似于 q=a:value 但我想跨字段搜索(如 q=value)
我在 solrConfig.xml 中尝试了以下内容,但没有 luck.Appreciate 任何指示
<initParams path="/update/**,/query,/select,/tvrh,/elevate,/spell,/browse">
<lst name="defaults">
<str name="df">text1</str>
</lst>
<copyField source="a" dest="text1" indexed="true" stored="true"/>
<copyField source="b" dest="text1" indexed="true" stored="true"/>
<copyField source="c" dest="text1" indexed="true" stored="true"/>
<copyField source="d" dest="text1" indexed="true" stored="true"/>
<copyField source="f" dest="text1" indexed="true" stored="true"/>
</initParams>
<fields>
<copyField source="a" dest="text1" indexed="true" stored="true"/>
<copyField source="b" dest="text1" indexed="true" stored="true"/>
<copyField source="c" dest="text1" indexed="true" stored="true"/>
<copyField source="d" dest="text1" indexed="true" stored="true"/>
<copyField source="f" dest="text1" indexed="true" stored="true"/>
</fields>
您可以使用名为 "text1" 的复制字段,将所有可搜索字段复制到此字段并将其指定为默认搜索字段。
<requestHandler name="/select" class="solr.SearchHandler">
<!-- default values for query parameters can be specified, these
will be overridden by parameters in the request
-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text1</str>
在schema.xml
<fields>
<field name="a" type="string" indexed="true" stored="true" required="true" />
<field name="b" type="string" indexed="true" stored="true" required="true" />
.
.
<field name="text1" type="text" indexed="true" stored="false" multiValued="true" />
</fields>
您可以将要复制的字段添加到复制字段,如下所示:
<copyField source="a" dest="text1"/>
<copyField source="b" dest="text1"/>
...
<copyField source="e" dest="text1"/>
使用 the edismax
query parser 并提供 qf
参数。它还可以让您以不同的方式提高每个领域的点击率。 qf=a^5 b
将给予 a
字段中的命中比 b
字段中的命中高五倍的权重。
由于字段规范现在位于 qf
参数中,因此 q
参数可以用作更简单的用户键入查询 - q=foo bar
.