Solr 查詢語法

jopen 11年前發布 | 62K 次閱讀 Solr 搜索引擎

由于 Solr 內部實現查詢語句的語法語義分析使用比較成熟的工具 Javacc,所以 Solr 支持的查詢語法還是很豐富的,Solr 查詢語法可以總結如下:

Solr 查詢無論是 Solrj 操作還是直接發送請求給 Solr 服務器,原理都是一樣的,本質上都是發送 http 請求給 Solr 服務器,不過與 Solrj 操作 Solr 服務器不同,Solr 查詢可以按照各種各樣的形式返回結果,比如重要的 Json 格式,可以實現 Ajax 動態顯示數據效果。

首先說一下 Solr 查詢語法的特點(就是普通的 get 請求,k=v)

一、當 k 是 q 的時候,表示查詢條件,具體我們來看看這個 k 的 v 怎么寫? 假設我們已經為三個 filed (name,addr,tel,time)建立了索引,我們應該怎么查詢我們想要的數據呢?

1:指定域查詢 域名:加上查詢條件(比如 name:clebeg) 也可以指定全部 用關鍵詞 all

二 、查詢參數

常用

q – 查詢字符串,必須的。
fl – 指定返回那些字段內容,用逗號或空格分隔多個。
start – 返回第一條記錄在完整找到結果中的偏移位置,0開始,一般分頁用。
rows – 指定返回結果最多有多少條記錄,配合start來實現分頁。
sort – 排序,格式:sort=<field name>+<desc|asc>[,<field name>+<desc|asc>]… 。示例:(inStock desc, price asc)表示先 “inStock” 降序, 再 “price” 升序,默認是相關性降序。
wt – (writer type)指定輸出格式,可以有 xml, json, php, phps, 后面 solr 1.3增加的,要用通知我們,因為默認沒有打開。
fq – (filter query)過慮查詢,作用:在q查詢符合結果中同時是fq查詢符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031],找關鍵字mm,并且date_time是20081001到20091031之間的。官方文檔:http://wiki.apache.org/solr/CommonQueryParameters
不常用

q.op – 覆蓋schema.xml的defaultOperator(有空格時用”AND”還是用”OR”操作邏輯),一般默認指定
df – 默認的查詢字段,一般默認指定
qt – (query type)指定那個類型來處理查詢請求,一般不用指定,默認是standard。
其它

indent – 返回的結果是否縮進,默認關閉,用 indent=true|on 開啟,一般調試json,php,phps,ruby輸出才有必要用這個參數。
version – 查詢語法的版本,建議不使用它,由服務器指定默認值。
[Solr的檢索運算符]
“:” 指定字段查指定值,如返回所有值*:*2
“?”2表示單個任意字符的通配
“*” 表示多個任意字符的通配(不能在檢索的項開始使用*或者?符號)2
“~”2表示模糊檢索,如檢索拼寫類似于”roam”的項這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。
2鄰近檢索,如檢索相隔10個單詞的”apache”和”jakarta”,”jakarta apache”~10
“^”2控制相關度檢索,如檢索jakarta apache,同時希望去讓”jakarta”的相關度更加好,那么在其后加上”^”符號和增量值,即jakarta^4 apache
布爾操作符AND、||2
布爾操作符OR、2&&
布爾操作符NOT、!、-2(排除操作符不能單獨與項使用構成查詢)
“+” 存在操作符,要求符號”+”后的項必須在文檔相應的域中存在2
( ) 用于構成子查詢2
2 [] 包含范圍檢索,如檢索某時間段記錄,包含頭尾,date:[200707 TO 200710]
{}2不包含范圍檢索,如檢索某時間段記錄,不包含頭尾
date:{200707 TO 200710}
” 轉義操作符,特殊字符包括+ – & | ! ( ) { } [ ] ^ ” ~ * ? : “

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!