solr php客户端搜索方法:用于搜索word1或word2?

时间:2009-12-15 15:36:25

标签: php full-text-search solr

我使用solr php客户端。

但是当我使用搜索方法时:

$params = array('qf' => 'threads.title posts.body', 'defType' => dismax);

$results = $solr->search($query, $offset, $limit, $params);

当我使用defType = dismax时,它会搜索$ query ='Peter Jakob'作为整个字符串而不是Peter OR Jakob。当我不使用$ params时,它工作正常。但主要问题是我必须使用dismax才能在多个领域进行搜索。

如何让solr php客户端知道我必须在多个字段和多个值(OR)中搜索?

这是我使用的搜索处理程序:

<requestHandler name="standard" class="solr.SearchHandler" default="true">
    <!-- default values for query parameters -->
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <!--
       <int name="rows">10</int>
       <str name="fl">*</str>
       <str name="version">2.1</str>
        -->
     </lst>
  </requestHandler>

2 个答案:

答案 0 :(得分:2)

Solr有一个界面让你看到它如何处理你的查询。也许你可以得到一些提示?它位于solr管理页面(http://ora.ouls.ox.ac.uk:8080/solr/admin/analysis.jsp?highlight=on)的ANALYSIS链接(http://ora.ouls.ox.ac.uk:8080/solr/admin/)中,尽管它似乎不适用于此solr实例。请在您自己的实例中查看。

也许你应该读这个:http://wiki.apache.org/solr/SolrQuerySyntax 而这:http://lucene.apache.org/java/2_4_0/queryparsersyntax.html

在schema.xml http://wiki.apache.org/solr/SchemaXml的文档中,声明

  

Solr使用的默认运算符   查询解析器(SolrQueryParser)可以   配置

<solrQueryParser defaultOperator="AND|OR"/>
  

在   默认运算符是“OR”if   未指定的。

所以它应该适合你而不做任何具体的事情。

如果您想将$ query =“Peter Jakob”转换为Peter OR Jakob,请执行以下操作:

$query = preg_replace('`(\\s)(\\w|"[^"]+")`', '\\1OR \\2', $query);

答案 1 :(得分:1)

这并不完全是你所追求的,但是你可以在不使用dismax且不编写复杂查询的情况下搜索多个字段。一种简单的方法是使用copyField系统将默认搜索字段复制到一个,然后将其设置为默认搜索字段,例如这个例子带有“标题”和“描述”字段。

有这样的字段:

   <field name="title" type="string" indexed="false" stored="true" />
   <field name="description" type="string" indexed="false" stored="true" />
   <field name="combined" type="string" indexed="true" stored="false" multiValued="true" />

设置如下的复制字段:

 <copyField source="title" dest="combined" />
 <copyField source="description" dest="combined" />

并设置默认搜索:

 <defaultSearchField>combined</defaultSearchField>

这将导致默认情况下针对“合并”字段运行搜索,其中包含标题和说明。