查詢參數
常用:
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。fq
- (filter query)過慮查詢,作用:在q查詢符合結果中同時是fq查詢符合的,例如:q=mm&fq=date_time:[20081001 TO 20091031]
,找關鍵字mm,並且date_time是20081001到20091031之間的
不常用:
defType
:q.op
- 覆蓋schema.xml的defaultOperator(有空格時用"AND"還是用"OR"操作邏輯),一般默認指定df
- 默認的查詢字段,一般默認指定qt
- (query type)指定那個類型來處理查詢請求,一般不用指定,默認是standard。
其它:
indent
- 返回的結果是否縮進,默認關閉,用indent=true|on
開啓,一般調試json,php,phps,ruby輸出纔有必要用這個參數。version
- 查詢語法的版本,建議不使用它,由服務器指定默認值。
檢索運算符
:
指定字段查指定值,如返回所有值:?
表示單個任意字符的通配*
表示多個任意字符的通配(不能在檢索的項開始使用*或者?符號)~
表示模糊檢索,如檢索拼寫類似於"roam"的項這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。 鄰近檢索,如檢索相隔10個單詞的"apache"和"jakarta","jakarta apache"~10^
控制相關度檢索,如檢索jakarta apache,同時希望去讓"jakarta"的相關度更加好,那麼在其後加上""符號和增量值,即jakarta4 apache- 布爾操作符
AND、||
- 布爾操作符
OR、&&
- 布爾操作符
NOT、!、-
(排除操作符不能單獨與項使用構成查詢) +
存在操作符,要求符號"+"後的項必須在文檔相應的域中存在()
用於構成子查詢[]
包含範圍檢索,如檢索某時間段記錄,包含頭尾,date:[200707 TO 200710]{}
不包含範圍檢索,如檢索某時間段記錄,不包含頭尾,date:{200707 TO 200710}"
轉義操作符,特殊字符包括+ - && || ! ( ) { } [ ] ^ " ~ * ? : "
示例
- 1. 查詢所有
http://localhost:8080/solr/primary/select?q=*:*
- 2. 限定返回字段
http://localhost:8080/solr/primary/select?q=*:*&fl=productId
表示:查詢所有記錄,只返回productId字段
- 3. 分頁
http://localhost:8080/solr/primary/select?q=*:*&fl=productId&rows=6&start=0
表示:查詢前六條記錄,只返回productId字段
- 4. 增加限定條件
http://localhost:8080/solr/primary/select?q=*:*&fl=productId&rows=6&start=0&fq=category:2002&fq=namespace:d&fl=productId+category&fq=en_US_city_i:1101
表示:查詢category=2002、en_US_city_i=110
以及namespace=d的前六條記錄,只返回productId和category字段
- 5. 添加排序
http://localhost:8080/solr/primary/select?q=*:*&fl=productId&rows=6&start=0&fq=category:2002&fq=namespace:d&sort=category_2002_sort_i+asc
表示:查詢category=2002以及namespace=d並按category_2002_sort_i
升序排序的前六條記錄,只返回productId字段
- 6. facet查詢
現實分組統計結果
http://localhost:8080/solr/primary/select?q=*:*&fl=productId&fq=category:2002&facet=true&facet.field=en_US_county_i&facet.field=en_US_hotelType_s&facet.field=price_p&facet.field=heatRange_i
http://localhost:8080/solr/primary/select?q=*:*&fl=productId&fq=category:2002&facet=true&facet.field=en_US_county_i&facet.field=en_US_hotelType_s&facet.field=price_p&facet.field=heatRange_i&facet.query=price_p:[300.00000+TO+*]
高亮
hl-highlight
,h1=true
,表示採用高亮。可以用h1.fl=field1,field2
來設定高亮顯示的字段。
hl.fl
:用空格或逗號隔開的字段列表。要啓用某個字段的highlight功能,就得保證該字段在schema中是stored。如果該參數未被給出,那麼就會高 亮默認字段 standard handler會用df參數,dismax字段用qf參數。你可以使用星號去方便的高亮所有字段。如果你使用了通配符,那麼要考慮啓用 。hl.requireFieldMatch
:如果置爲true,除非該字段的查詢結果不爲空纔會被高亮。它的默認值是false,意味 着它可能匹配某個字段卻高亮一個不同的字段。如果hl.fl使用了通配符,那麼就要啓用該參數。儘管如此,如果你的查詢是all字段(可能是使用 copy-field 指令),那麼還是把它設爲false,這樣搜索結果能表明哪個字段的查詢文本未被找到- h
l.usePhraseHighlighter
:如果一個查詢中含有短語(引號框起來的)那麼會保證一定要完全匹配短語的纔會被高亮。 hl.highlightMultiTerm
如果使用通配符和模糊搜索,那麼會確保與通配符匹配的term會高亮。默認爲false,同時hl.usePhraseHighlighter
要爲true。hl.snippets
: 這是highlighted片段的最大數。默認值爲1,也幾乎不會修改。如果某個特定的字段的該值被置爲0(如f.allText.hl.snippets=0
),這就表明該字段被禁用高亮了。你可能在hl.fl=*時會這麼用。hl.fragsize
: 每個snippet返回的最大字符數。默認是100.如果爲0,那麼該字段不會被fragmented且整個字段的值會被返回。大字段時不會這麼做。hl.mergeContiguous
: 如果被置爲true,當snippet重疊時會merge起來。hl.maxAnalyzedChars
: 會搜索高亮的最大字符,默認值爲51200,如果你想禁用,設爲-1hl.alternateField
: 如果沒有生成snippet(沒有terms 匹配),那麼使用另一個字段值作爲返回。hl.maxAlternateFieldLength
: 如果hl.alternateField
啓用,則有時需要制定alternateField的最大字符長度,默認0是即沒有限制。所以合理的值是應該爲hl.snippets * hl.fragsize
這樣返回結果的大小就能保持一致。hl.formatter
:一個提供可替換的formatting算法的擴展點。默認值是simple,這是目前僅有的選項。顯然這不夠用,你可以看看org.apache.solr.highlight.HtmlFormatter.java
和 solrconfig.xml 中highlighting元素是如何配置的。 注意在不論原文中被高亮了什麼值的情況下,如預先已存在的em tags,也不會被轉義,所以在有時會導致假的高亮。 -hl.fragmenter
:這個是solr制定fragment算法的擴展點。gap是默認值。regex是另一種選項,這種選項指明highlight的邊界由一個正則表達式確定。這是一種非典型 的高級選項。爲了知道默認設置和fragmenters (and formatters)是如何配置的,可以看看 solrconfig.xml 中的highlight段。hl.regex.pattern
:正則表達式的patternhl.regex.slop
:這是hl.fragsize能變化以適應正則表達式的因子。默認值是0.6,意思是如果hlfragsize=100
那麼fragment的大小會從40-160.