Solr查詢數據,其實下面一堆的參數,我也沒有做測試,只是轉載過來了,我大概只用了高亮、排序、查詢、分頁,其他的好像沒有用過,以后用再來查
一.基本查詢
參數 | 意義 |
---|---|
q | 查詢的關鍵字,此參數最為重要,例如,q=id:1,默認為q=:, |
fl | 指定返回哪些字段,用逗號或空格分隔,注意:字段區分大小寫,例如,fl= id,title,sort |
start | 返回結果的第幾條記錄開始,一般分頁用,默認0開始 |
rows | 指定返回結果最多有多少條記錄,默認值為 10,配合start實現分頁 |
sort | 排序方式,例如id desc 表示按照 “id” 降序 |
wt | (writer type)指定輸出格式,有 xml, json, php等 |
fq | (filter query)過慮查詢,提供一個可選的篩選器查詢。返回在q查詢符合結果中同時符合的fq條件的查詢結果,例如:q=id:1&fq=sort:[1 TO 5],找關鍵字id為1 的,並且sort是1到5之間的。 |
df | 默認的查詢字段,一般默認指定。 |
qt | (query type)指定那個類型來處理查詢請求,一般不用指定,默認是standard。 |
indent | 返回的結果是否縮進,默認關閉,用 indent=true |
version | 查詢語法的版本,建議不使用它,由服務器指定默認值。 |
二. Solr的檢索運算符
符號 | 意義 |
---|---|
“:” | 指定字段查指定值,如返回所有值: |
“?” | 表示單個任意字符的通配 |
“*” | 表示多個任意字符的通配(不能在檢索的項開始使用*或者?符號) |
“~” | 表示模糊檢索,如檢索拼寫類似於”roam”的項這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。 |
AND || |
布爾操作符 |
OR、&& | 布爾操作符 |
NOT、!、- | (排除操作符不能單獨與項使用構成查詢) |
“+” | 存在操作符,要求符號”+”后的項必須在文檔相應的域中存在² |
( ) | 用於構成子查詢 |
[] | 包含范圍檢索,如檢索某時間段記錄,包含頭尾,date:[201507 TO 201510] |
{} | 不包含范圍檢索,如檢索某時間段記錄,不包含頭尾date:{201507 TO 201510} |
三. 高亮
符號 | 意義 |
---|---|
h1 |
|
hl.fl |
|
hl.requireFieldMatch |
|
hl.usePhraseHighlighter |
|
hl.highlightMultiTerm |
|
hl.fragsize | -返回的最大字符數。默認是100.如果為0,那么該字段不會被fragmented且整個字段的值會被返回。 |
四. 分組
官方wiki:http://wiki.apache.org/solr/SimpleFacetParameters#Facet_Fields_and_Facet_Queries,
這是facet的官方wiki,里面有facet各個參數的詳細說明。所以這里只說一些常用的。
Facet是Solr的核心搜索功能,主要是導航(Guided Navigation)、參數化查詢(Paramatic Search)。Facet的主要好處是在搜索的同時,可以按照Facet條件進行分組統計,給出導航信息,改善搜索體驗。
Facet主要分為:Field Facet 和 Date Facet 兩大類
1. Field Facet
facet 參數字段必須被索引
facet=on 或 facet=true
facet.field 分組的字段
facet.prefix 表示Facet字段前綴
facet.limit Facet字段返回條數
facet.offict 開始條數,偏移量,它與facet.limit配合使用可以達到分頁的效果
facet.mincount Facet字段最小count,默認為0
facet.missing 如果為on或true,那么將統計那些Facet字段值為null的記錄
facet.sort 表示 Facet 字段值以哪種順序返回 .格式為 true(count)|false(index,lex),true(count) 表示按照 count 值從大到小排列,false(index,lex) 表示按照字段值的自然順序 (字母 , 數字的順序 ) 排列 . 默認情況下為 true(count)
2. Date Facet
對日期類型的字段進行 Facet. Solr 為日期字段提供了更為方便的查詢統計方式 .注意 , Date Facet的字段類型必須是 DateField( 或其子類型 ). 需要注意的是 , 使用 Date Facet 時 , 字段名 , 起始時間 , 結束時間 , 時間間隔這 4 個參數都必須提供 .
符號 | 意義 |
---|---|
facet.date | 該參數表示需要進行 Date Facet 的字段名 , 與 facet.field 一樣 , 該參數可以被設置多次 , 表示對多個字段進行 Date Facet. |
facet.date.start | 起始時間 , 時間的一般格式為 ” 2015-12-31T23:59:59Z”, 另外可以使用 ”NOW”,”YEAR”,”MONTH” 等等 , |
facet.date.end | 結束時間 |
facet.date.gap | 時間間隔,如果 start 為 2015-1-1,end 為 2016-1-1,gap 設置為 ”+1MONTH” 表示間隔1 個月 , 那么將會把這段時間划分為 12 個間隔段 . |
facet.date.hardend | 表示 gap 迭代到 end 時,還剩余的一部分時間段,是否繼續去下一個間隔. 取值可以為 true |
例 start 為 2015-1-1,end 為 2015-12-21,gap 為 ”+1MONTH”, 如果hardend 為 false,則,最后一個時間段為 2015-12-1 至 2016-1-1; 反之,如果 hardend 為 true,則,最后一個時間段為 2015-12-1 至 2015-12-21.
注意:Facet的字段必須被索引,無需分詞,無需存儲。無需分詞是因為該字段的值代表了一個整體概念,無需存儲是因為一般而言用戶所關心的並不是該字段的具體值,而是作為對查詢結果進行分組的一種手段,給出相關的分組信息,從而改善搜索體驗。