我使用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>
答案 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>
这将导致默认情况下针对“合并”字段运行搜索,其中包含标题和说明。