【问题标题】:Updating Solr configuration to search on all fields更新 Solr 配置以搜索所有字段
【发布时间】:2025-12-04 02:05:03
【问题描述】:

谁能告诉我如何在所有领域搜索 Solr?

这是我当前的 requestHandler,名为“search”并使用 solr.SearchHandler。

<requestHandler name="search" class="solr.SearchHandler" default="true">
  <!-- 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>
   </lst>
</requestHandler>

看来我可以搜索所有 textual 字段,但是我需要搜索一个名为“s_number”的字段,这是一个整数。

我是否需要使用 DisMax 才能搜索所有字段?

另外,我需要调整 schema.xml 中的 defaultSearchField 吗?目前是:

<defaultSearchField>text</defaultSearchField>

【问题讨论】:

  • 当它们不是文本字段时,它们被视为分面,您必须进行分面搜索:wiki.apache.org/solr/SolrFacetingOverview
  • @BenLee 要执行分面搜索,我是否必须在 requestHandler 部分更改我的 solrconfig.xml 以允许分面?我知道,如果我搜索一个文本术语并 then 过滤 s_number 那么它就可以工作。但是,我只想在没有文本术语的情况下搜索 s_number。目前所有的 facet.field 和 facet.query 条目都在 solrconfig.xml 中被注释掉。你能告诉我是否需要改变这个吗?
  • 对不起,我一开始误解了你的问题。你不需要这里的方面。请参阅我刚刚发布的答案,了解如何仅在单个非文本字段上进行搜索。

标签: php solr


【解决方案1】:

您所说的 defaultSearchField 参数在您的 schema.xml 中引用此字段:

<!-- catchall field, containing all other searchable text fields (implemented
        via copyField further on in this schema  -->
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>

如果您再往下看,您应该会看到如下所示的语句:

<copyField source="name" dest="text"/>
<copyField source="summary" dest="text"/>

您可能想要为您的 s_number 字段添加一个 copyfield 参数,如下所示:

<copyField source="s_number" dest="text"/>

这会将数字字段复制到您的默认搜索字段(文本)中。文本字段是默认搜索术语的“垃圾场”。它的好处是您可以控制如何以及将哪些信息放入默认搜索中。不好的是,你需要在默认中为你想要的每个字段添加copyField参数。

【讨论】:

  • 真是奇怪,我所有的copyField节点都被注释掉了。就当前搜索的字段而言,这意味着什么?我可以搜索“product_name”,但是这里没有明确列出。我使用日光浴室有什么不同吗?
  • Solarium 应该没关系...你能发布执行搜索请求的 PHP 代码吗?您是否在查询中明确搜索该字段?
【解决方案2】:

要搜索非文本字段,您可能不必编辑配置文件。您只需要将参数正确添加到您的 solr 查询中。

基本思想是您可以使用键/值对来搜索非文本字段。见http://wiki.apache.org/solr/SolrQuerySyntax

要仅搜索 s_number,您可以像这样设置对 solr 服务器的查询:

q=s_number:123

这将只返回 s_number 为 123 的结果,正如预期的那样 - 它作为常规搜索执行,而不是搜索后过滤器。我不知道您使用的是什么 php solr 库,因此我无法为您提供如何在代码中设置此查询参数的确切代码。如果您告诉我您正在使用什么库和/或发布实际执行搜索的源代码,我也许可以为您提供更准确的详细信息。

但直接与您的 solr 服务器对话,查询将如下所示:

http://your-solr-server:8983/solr/select/?q=s_number%3A123

【讨论】: