【问题标题】:Search over all fields on Solr搜索 Solr 上的所有字段
【发布时间】:2019-09-20 21:08:30
【问题描述】:

我正在尝试对 Solr 上的所有字段进行搜索。前http://localhost:8983/solr/sample-items/select?q=oscar 但没有结果返回。但是,如果我指定它工作正常的字段 Ex http://localhost:8983/solr/sample-items/select?q=name:oscar

我尝试使用 copyField 如下但不工作: 在托管模式文件上

  <field name="Designation" type="text_general" stored="true"/>
  <field name="Location" type="text_general" stored="true"/>
  <field name="_root_" type="string" docValues="false" indexed="true" stored="true"/>
  <field name="_version_" type="plong" indexed="false" stored="true"/>
  <field name="age" type="plongs" stored="true"/>
  <field name="id" type="string" multiValued="false" indexed="true" required="true" stored="true"/>
  <field name="name" type="text_general" stored="true"/>
  <field 
    name="_text_" 
    type="text_general" 
    indexed="true" 
    stored="true" 
    multiValued="true"
  />
.
.
.

<fields>
  <copyField source="Designation" dest="_text_" maxChars="256"/>
  <copyField source="name" dest="_text_" maxChars="256"/>
  <copyField source="Location" dest="_text_" maxChars="256"/>
</fields>

关于 solrconfig.xml 文件

  <lst name="defaults">
      <str name="echoParams">explicit</str>
      <int name="rows">10</int>
    </lst>

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

有什么建议吗?

【问题讨论】:

    标签: search solr


    【解决方案1】:

    为了能够默认从>1个字段(或所有字段)进行搜索,您需要执行以下两个配置。

    • 在模式文件(例如managed_schema)中创建复制字段并将其他字段的数据复制到此复制字段中。示例如下。

    ... <field name="_text_" type="text_general" multiValued="true" indexed="true" stored="false"/> ... <copyField source="directed_by" dest="_text_" maxChars="256"/> <copyField source="genre" dest="_text_" maxChars="256"/> ...

    • solrconfig.xml 中,更新initiParam 标记以使上面创建的复制字段成为搜索处理程序的默认搜索字段。示例如下。

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

    示例查询和输出

    ShubhangiP:~ spardeshi$ curl -XGET http://localhost:8983/solr/films/select?q=Gary { "responseHeader":{ "status":0, "QTime":0, "params":{ "q":"Gary"}}, "response":{"numFound":1,"start":0,"docs":[ { "id":"/en/45_2006", "directed_by":["Gary Lennon"], "initial_release_date":"2006-11-30T00:00:00Z", "genre":["Black comedy", "Thriller", "Psychological thriller", "Indie film", "Action Film", "Crime Thriller", "Crime Fiction", "Drama"], "name":".45", "_version_":1645282402834055168}] }}

    根据所提供的详细信息,managed_schema 文件收集器字段用作其他三个名为 Designation 、 Name 和 Location 的字段的复制字段。

    但不确定您是否将收集器字段设置为默认搜索字段。

    【讨论】:

    • @IDI ,请注意两点 - 1) 要使上述更改生效,您需要重新启动 Solr 服务器 2) 只有在上述更改后被索引的文档才会用于默认查询字段(例如 文本)。
    【解决方案2】:

    您也可以考虑使用 edismax 查询解析器。这里是相同的链接。 the edismax query parser 。这里可以提供qf 参数。它使您能够以不同的方式提高每个领域的点击率。例如,qf=field1^4 field2 将赋予field1 字段中的匹配项的权重是field2 字段中的匹配项的四倍。

    搜索多个字段,指定(通过提升)每个字段的相对重要性:

    http://localhost:8983/solr/techproducts/select?q=video&defType=edismax&qf=features^20.0+text^0.3
    

    您可以提升具有与特定值匹配的字段的结果:

    http://localhost:8983/solr/techproducts/select?q=video&defType=edismax&qf=features^20.0+text^0.3&bq=cat:electronics^5.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 2011-12-05
      • 1970-01-01
      相关资源
      最近更新 更多