六、solr查詢參數

原地址:http://www.cnblogs.com/zhangweizhong/p/5056884.html


今天還是不會涉及到.Net和數據庫操作,主要還是總結Solr 的查詢參數,還是那句話,只有先明白了solr的基礎內容和查詢語法,後續學習solr 的C#和數據庫操作,都是水到渠成的事。這裏先列出solr查詢所需要的參數

  wiki 地址:http://wiki.apache.org/solr/FrontPage, 裏面有各個參數詳細的介紹。

   

  一.基本查詢

  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|on 開啓,一般調試json,php,phps,ruby輸出纔有必要用這個參數。

  version   查詢語法的版本,建議不使用它,由服務器指定默認值。

 

  二. Solr的檢索運算符

  “:”  指定字段查指定值,如返回所有值*:*

  “?”  表示單個任意字符的通配

  “*”  表示多個任意字符的通配(不能在檢索的項開始使用*或者?符號)

  “~”  表示模糊檢索,如檢索拼寫類似於”roam”的項這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。

  AND、||  布爾操作符

  OR、&&  布爾操作符

  NOT、!、-(排除操作符不能單獨與項使用構成查詢)

  “+”  存在操作符,要求符號”+”後的項必須在文檔相應的域中存在²

  ( )  用於構成子查詢

  []  包含範圍檢索,如檢索某時間段記錄,包含頭尾,date:[201507 TO 201510]

  {}  不包含範圍檢索,如檢索某時間段記錄,不包含頭尾date:{201507 TO 201510}

 

  三. 高亮

  h1  是否高亮,hl=true,表示採用高亮

  hl.fl  設定高亮顯示的字段,用空格或逗號隔開的字段列表。要啓用某個字段的highlight功能,就得保證該字段在schema中是stored。如果該參數未被給出,那麼就會高亮默認字段 standard handler會用df參數,dismax字段用qf參數。你可以使用星號去方便的高亮所有字段。如果你使用了通配符,那麼要考慮啓用hl.requiredFieldMatch選項。

  hl.requireFieldMatch   如果置爲true,除非用hl.fl指定了該字段,查詢結果纔會被高亮。它的默認值是false。

  hl.usePhraseHighlighter   如果一個查詢中含有短語(引號框起來的)那麼會保證一定要完全匹配短語的纔會被高亮。

  hl.highlightMultiTerm   如果使用通配符和模糊搜索,那麼會確保與通配符匹配的term會高亮。默認爲false,同時hl.usePhraseHighlighter要爲true。

  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|false, 默認爲 false.

    例 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的字段必須被索引,無需分詞,無需存儲。無需分詞是因爲該字段的值代表了一個整體概念,無需存儲是因爲一般而言用戶所關心的並不是該字段的具體值,而是作爲對查詢結果進行分組的一種手段,給出相關的分組信息,從而改善搜索體驗。


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