2011-10-15 122 views

回答

4

Jayendra的答案是正確的,但如果你想這樣做,而不在一個單一的聚合數據在指數時間(copyFields),並希望而不是使用標準處理程序,而不是在dismax查詢的時間去做領域,SolrNet你可以這樣做:

var query = Query.Field("title").Is(mytitle) || Query.Field("Description").Is(mydescription); 
var results = solr.Query(query); 

query operatorsDSL瞭解更多信息。

+0

哇..很有趣。當有人在查詢框中鍵入「火箭科學家」時,我將它傳遞給solrnet。我爲「mytitle」和「mydescription」做了什麼? – Luke101

+0

@ Luke101:它們是一樣的...只是代表用戶輸入的樣本變量。例如。 mytitle = mydescription = Request.QueryString [「q」]; –

+0

謝謝..我繼續並實施此解決方案。 – Luke101

2

如果您使用的是標準請求處理程序 -
創建一個新字段title_description並將標題和說明字段複製到此字段。
將該字段用作默認搜索字段。與默認的搜索欄搜索解僱

<defaultSearchField>title_description</defaultSearchField> 

查詢Q -

q=bank 

OR

如果你可以使用dismax或edismax查詢分析器,你可以定義一個新的請求處理程序。
將查詢字段定義爲qf。

<requestHandler name="dismax" class="solr.SearchHandler"> 
    <lst name="defaults"> 
    <str name="echoParams">explicit</str> 
    <!-- Query settings --> 
    <str name="defType">edismax</str> 
    <str name="qf"> 
     title description 
    </str> 
    <str name="q.alt">*:*</str> 
    <str name="rows">10</str> 
    <str name="fl">*,score</str> 
    </lst> 
</requestHandler> 

查詢 - 通過dismax因爲這將在標題和描述字段搜索QT參數

q=bank&qt=dismax 
0

請嘗試在下面的方法中傳遞包含多個字段名稱和搜索文本的字符串數組。我將返回solrnet查詢以搜索具有OR條件的多個存檔名稱。

public ISolrQuery BuildQuery(string[] SearchFields, string SearchText) 
    { 

     AbstractSolrQuery firstQuery = new SolrQueryByField(SearchFields[0], SearchText) { Quoted = false }; 
     for (var i = 1; i < SearchFields.Length; i++) 
     { 
      firstQuery = firstQuery || new SolrQueryByField(SearchFields[i], SearchText) { Quoted = false }; 
     } 

     return firstQuery; 
    }