Solr 查询语法
摘要: 默認的Solr查詢語法擴展了Lucene的語法,其目的也就是檢索索引。
basic query
Solr的查詢用到了參數q,標準的查詢語法就想下面這樣:
http://localhost:8983/solr/query?q=test
可以使用debug=query來分析查詢過程:
http://localhost:8983/solr/query?q=test&debug=query
一般來說,response會包含匹配程度最好的文檔,但是上面例子中,沒有文檔滿足這一查詢。
在debug信息中,可以看到是如何解析查詢語句的:查詢的主體是hello,查詢的字段是text。
一般來說,查詢會指定在哪個字段查詢,語法:
title:China
表示的意思是查詢title字段包含China信息。
phrase query
短語查詢是需要滿足多個查詢詞組。
text:"Air China"
這樣的話,查詢到的結果必須包含Air China這樣的詞組,如果標題中只有Air Liquide China是不會匹配到的。
proximity query
臨近查詢有點像短語查詢的擴充,允許干擾項出現在所查詢的詞組之間。
text:"bank of china"~2
如果這樣的話,不僅可以匹配到Bank of China這樣的詞組,還會匹配central bank system of china、bank institution of china這樣的短語。
Boolean query
布爾查詢可以包含多條查詢語句,可以使查詢條件是可選的、必須的、禁止的。
solr search
默認的查詢操作符是OR,也就是說是可選的。那么text中包含solr或包含search都滿足查詢語句。
可以使用一些操作符來實現布爾查詢,例如+、AND表示必須的,-、NOT表示禁止的,OR表示可選的。
+solr +search example -test
可以認為返回的結果必須包含solr和search,不能出現test,有沒有exapmle無所謂。
下面這種寫法表達的是相同的意思:
solr AND search OR exapmle NOT test
boosted query
提升查詢需要用到操作符^,該查詢不會影響到查詢結果的數量,只會改變相關性,影響結果的排序。
text:solr^10 text:rocks text:(solr^10 rocks) (inStock:true AND text:solr)^123.45 text:hiRange query
范圍查詢需要選定一定范圍的文檔,查詢可以作用于數字類型、日期類型、字符串類型。
age:[18 TO 30] // 匹配 age 在18-30 之間(包含 18 和 30 )age:[18 TO 30} // 匹配 age 在18-30 之間(包含 18 不含 30 )age:[65 TO *] // 匹配 age 大于 65age:[* TO *] // 匹配所有含有age字段的文檔constant score query
常數得分查詢有點像布爾查詢,只是該查詢需要左右的文檔有相同的得分,查詢需要用到操作符^=。
+color:blue^=1 text:shoes
filter query
過濾查詢需要用到fiter chche,返回的結果都來自緩存,但是由于score 不會緩存,所以滿足查詢條件的文檔得分都是0,不過該查詢請求響應會很快(來自緩存)。
description:HDTV OR filter(+promotion:tv +promotion_date:[NOW/DAY-7DAYS TO NOW/DAY+1DAY])
這里用到了filter()語法。
query comments
可以使用像C語言一樣的注釋語法給solr的查詢語法添加注釋。語法如下:
/* comments */
一個例子:
description:HDTV /* TODO: +promotion:tv +promotion_date:[NOW/DAY-7DAYS TO NOW/DAY+1DAY] */
總結
- 上一篇: 用JS实现歌词与播放音乐同步
- 下一篇: 星际争霸职业玩家能力表