更新Solr配置以搜索所有字段

时间:2011-12-01 11:24:19

标签: php solr

有人可以告诉我如何在所有领域搜索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>

似乎我可以搜索所有文本字段,但是我需要搜索名为's_number'的字段,这是一个整数。

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

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

<defaultSearchField>text</defaultSearchField>

2 个答案:

答案 0 :(得分:4)

您正在讨论的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参数。

答案 1 :(得分:0)

要搜索非文本字段,您可能不必编辑配置文件。您只需要将参数正确添加到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