2013-07-08 35 views
0

我們正在使用Solr作爲後端引擎來實現搜索功能。數據使用DIH從數據庫中提取。該文件的關鍵信息包括:使用Solr搜索動態列表的最佳方法?

- product number (number) 
- product name (name) 
- applicant name (applicant) 
- product purpose (purpose) 

所有字段都存儲和索引。

我們提供一個搜索框讓用戶輸入任意數量的關鍵字,系統將搜索所有字段並嘗試匹配所有關鍵字。爲此,我們使用「copyField」創建結合上述所有信息的附加字段。

但是,另一個要求是用戶將能夠限制他們在選定的目標領域的搜索。例如,用戶只能選擇名稱和用途字段。在這種情況下,關鍵字搜索將只從這兩個字段中搜索。

目前,我們使用下面的查詢方法來實現的功能:

例如,假設

- the user provide keywords: K1 and K2, 
- and the user want to search on name, applicant and purpose only, 

以下搜索字符串將動態生成併發送到Solr:

(name:K1 OR applicant:K1 OR purpose:K1) AND (name:K2 OR applicant:K2 OR purpose:K2) 

有沒有其他方法來實現該功能?如果您能分享您的專業知識,我們將非常感激。

感謝, 範

回答

0

你可以檢查請求的處理程序與edismax,並使用缺省配置qf這將在其所有的字段保存數據的copyfield搜索。

qf將在其上執行查詢的查詢字段。

您只需傳遞一個參數即可索取qt=edismax&q=K1 K2進行搜索。

<requestHandler name="edismax" class="solr.SearchHandler" > 
    <lst name="defaults"> 
     <str name="defType">edismax</str> 
     <str name="qf"> 
      all_fields 
     </str> 
     <str name="fl"> 
      *,score 
     </str> 
     <str name="q.alt">*:*</str> 
    </lst> 
</requestHandler> 

如果用戶想要搜索名稱或目的,我會建議只是將字段和查詢傳遞給此請求處理程序。
傳遞的參數將覆蓋默認參數。

您只需傳遞一個參數即可搜索。

您可以使用mm(最小匹配)參數來控制OR行爲。

+0

嗨Jayendra,謝謝你的回答。 「(名稱:K1 OR申請人:K1)和(名稱:K2 OR申請人:K2)」是否「qt = edismax&q = K1 K2&qf =這兩種方法之間的區別是什麼(例如性能?) – user1397457

+0

性能將與查詢觸發的結果相同。這很容易配置和處理 – Jayendra

相關問題