2009-12-15 65 views
1

我使用solr php客戶端。solr php客戶端搜索方法:用來搜索word1還是word2?

但是當我使用的搜索方法:

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

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

當我使用DEFTYPE = dismax它搜索$查詢=「彼得·雅各布」作爲整個字符串,而不是彼得或雅各布。它工作正常,當我不使用$參數。但主要問題是我必須使用dismax才能夠在多個領域進行搜索。

我該如何讓solr php客戶端知道我必須在多個字段和多個值(或)進行搜索?

這裏是用我的搜索處理機IM:

<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

請發佈您的schema.xml – 2009-12-15 15:52:16

+0

查看更新的問題 – ajsie 2009-12-15 16:00:53

+0

那不是schema.xml – 2009-12-15 16:48:16

回答

2

Solr的有,讓你看看它是如何處理您的查詢的接口。也許你可以在那裏得到一些提示?它位於solr管理頁面(http://ora.ouls.ox.ac.uk:8080/solr/admin/)中的ANALYSIS鏈接(http://ora.ouls.ox.ac.uk:8080/solr/admin/analysis.jsp?highlight=on),儘管它在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雅各布只是做到以下幾點:

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

您能否詳細說明?什麼接口和我如何使用它? – ajsie 2009-12-15 15:47:13

+0

對不起,我無法幫助你。我不再每日使用solr,而且我有點生鏽。 – 2009-12-15 15:59:35

+0

也許只是尋找彼得或雅各佈會給你想要的東西? – 2009-12-15 16:00:40

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" /> 

設置copyfields這樣的:

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

和設置您的默認搜索是這樣的:

<defaultSearchField>combined</defaultSearchField> 

這將導致搜索運行與默認情況下的「組合」字段相對,其中包含標題和說明。