solr查詢進階

1、摘要
Solr是一個獨立的企業級搜索應用服務器,它對外提供類似於Web-serviceAPI接口。用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引;也可以通過Http Get操作提出查找請求,並得到XML格式的返回結果。
Java中,我們只要使用Apache提供的 Solrj 這個工具,導入相關包,調用其 API 就可以對 solr 進行操作了。
一般的查詢只要按solr的語法拼寫查詢語句,如:name:張三,調用查詢接口即可,下面介紹幾個高級的查詢接口相關使用方法。
 
2、創建SolrCloudsolrj server

SolrCloud是基於SolrZookeeper的分佈式搜索方案,從Solr4.0開始包含在其中。獲取非分佈式solrj server 與獲取分佈式集羣,即SolrCloud的不同,非分佈式方式中獲取需要用到的連接信息是solr服務的IP及端口,而在SolrCloud下需要用到的連接信息ZookeeperIP和端口,如:


3facet查詢

Facet查詢意爲面查詢,是solr中實現分組統計的工具。比如,需要查詢“手機”,並根據品牌統計出各有多少個查詢結果:三星(100),蘋果(10),諾基亞(100)。此時,就可以用到facet查詢。

 
solr有幾種facet:
A、普通facet,比如上面所舉例子;
B、查詢facet,比如根據價格查詢時,將根據價格,設置多個區間,比如0-1010-2020-30等;
C、日期facet,也是一種特殊的範圍查詢,比如按照月份進行facet
Facet接口使用方法:


這樣就做成了一個簡單facet,調用之後,它就會給你返回一個xml格式的內容,你可以調用solrJAPI來取得相應的內容。
4group by
group by,與數據庫中的意義一樣,也是進行分組查詢,但與上面講到的facet查詢不同,facet查詢與group by的區別在於:facet的查詢結果主要是分組信息:有什麼分組,每個分組包括多少記錄;但是分組中有哪些數據是不可知道的,只有進一步搜索;group則類似於關係數據庫的group by,可以用於一個或者幾個字段去重、顯示一個group的前幾條記錄等。
 
Group by接口使用方法:

同樣,調用之後,它就會給你返回一個xml格式的內容,你可以調用solrJAPI來取得相應的內容。
 
5、自定義權重排序
Solr的查詢結果中,默認以score值排序,scoresolr中的一個系統字段,存放該查詢結果的評分結果,solr中有一個已經十分好的評分公式,但不一定符合某些比較特殊的業務需求,此時就需要對評分過程進行干預。
當查詢結果排序中需要排除頻率影響,如查詢:name:手機電池,如果不排除頻率的影響,“手機手機手機”會比“手機電池”排得更前,但這不是我們期望的結果。要排除頻率的影響,可以自定義自己的評分器:
然後,修改solr默認的Similarity類。在solr 的配置文件schemal.xml,最後中修改或增加:<similarity class="com.MySolrSimilarity"/>,設置爲自定義的評分器,重啓solr服務後,自定義的評分器就生效了。
 
也可以通過在查詢語句中設置權重干預評分,例如:有字段titlecontent,查詢關鍵字:“手機”和“電腦”,需要查詢titlecontent包含任一關鍵字的結果;title包含“手機”權重爲100,包含“電腦”權重爲1content包含“手機”權重爲1,包含“電腦”權重爲100,則查詢語句可以寫成:
title:手機^100 電腦^1 OR content:手機^1 電腦^100
 
具體的評分詳細信息,可以通過solr服務的查詢界面中獲取,只要勾選debugQuery選項開啓debug模式即可。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章