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.