2014年10月27日 星期一

Solr_04_01_curl查詢

  • 常用查詢參數
    q – 查詢字符串,必須的。
    fl – 指定返回那些field內容,用逗號或空格分隔多個。
    start – 返回第一條記錄在完整找到結果中的偏移位置,0開始,一般分頁用。
    rows – 指定返回結果最多有多少條記錄,配合start來實現分頁。
    sort – 排序,格式:sort=<field name>+<desc|asc>[,<fieldname>+<desc|asc>]… 。示例:(inStock desc, price asc)表示先 “inStock” 降序, 再 “price” 升序,默認是相關性降序。
    注:排序field只能針對數值型如:int,dobuble等…
    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之間的。

  • 非常用查詢參數
    q.op – 覆蓋schema.xml的defaultOperator(有空格時用"AND"還是用"OR"操作邏輯),一般默認指定
    df – 默認的查詢field,一般默認指定
    qt – (query type)指定那個類型來處理查詢請求,一般不用指定,默認是standard。
    indent – 返回的結果是否縮進,默認關閉,用 indent=true|on 開啓,一般調試json,php,phps,ruby輸出才有必要用這個參數。
    version – 查詢語法的版本,建議不使用它,由服務器指定默認值。

  •  Solr的檢索運算符
    1. :” 指定field查指定值,如返回所有值*:*
    2. ?” 表示單個任意字符的通配
    3. *” 表示多個任意字符的通配(不能在檢索的項開始使用*或者?符號)
    4.  “~” 表示模糊檢索,如檢索拼寫類似於”roam”的項這樣寫:roam~將找到形如foam和roams的單詞;roam~0.8,檢索返回相似度在0.8以上的記錄。
    5. 鄰近檢索,如檢索相隔10個單詞的”apache”和”jakarta”,”jakarta apache”~10
    6. ^” 控制相關度檢索,如檢索jakarta apache,同時希望去讓”jakarta”的相關度更加好,那麼在其後加上”^”符號和增量值,即jakarta^4 apache
    7. 布爾操作符AND||
    8. 布爾操作符OR&&
    9. 布爾操作符NOT!- (排除操作符不能單獨與項使用構成查詢)
    10. +” 存在操作符,要求符號”+”後的項必須在文檔相應的域中存在
    11. ( ) 用於構成子查詢
    12. [] 包含範圍檢索,如檢索某時間段記錄,包含頭尾,date:[2014-09-25T00:00:00Z TO  2014-10-01T00:00:00Z]
    13. {} 不包含範圍檢索,如檢索某時間段記錄,不包含頭尾
      注:範圍檢索field只適用於:String,int,dobule,date不能用於long型的field
    14.   轉義操作符,特殊字符包括+ – && || ! ( ) { } [ ] ^ ” ~ * ? :\

  • field為 solr.TextField
  • field 數值型態
    查詢語法可搜尋其數字區間
    例如:
    menu_id:[0 TO 5] =  介於 0 ~ 5 之間的menu_id (TO 要大寫)

  • field日期型態
    查詢語法可搜尋其日期區間
    例如:
    menu_created:[NOW-10DAYS TO NOW-6DAYS]
    就會尋找10天前到六天前之間的資料
    詳細用法請參閱 Working with Dates

  • field 列舉列態 solr.EnumField
    詳細用法請參閱 Working with Enum Fields

  • solr查詢的一些常用語法

    1. 首先假設我的數據里fields有:name, tel, address 預設的搜尋是name這個字段, 如果要搜尋的數據剛好就是 name 這個字段,就不需要指定搜尋字段名稱。
    2. 查詢規則:
      如欲查詢特定字段(非預設字段),請在查詢詞前加上該字段名稱加“:” (不包含”號) 符號,例如: address:北京市海淀區上地軟件園 tel:88xxxxx1
      1. q代表query input
      2. version代表solr版本(建議不要變動此變數)
      3. start代表顯示結果從哪一筆結果資料開始,預設為0代表第一筆, rows是說要顯示幾筆數據,預設為10筆
         
        (因為有時查詢結果可能有幾百筆,但不需要顯示所有結果,所以預設是從第一筆開始到第十筆)
         
        所以若要顯示第10到30筆就改為:
        http://localhost:8983/solr/select/?indent=on&version=2.2&q=address:北京市海淀區上地軟件園+tel:88xxxxx1&version=2.2&start=10&rows=20&indent=on
        (indent代表輸出的xml要不要縮行.預設為開啓 on)
    3. 另外,要限定輸出結果的內容可用 “fl=” 加上你要的字段名稱,如以下這個範例:
      http://localhost:8080/solr/select/?indent=on&version=2.2&q=text:北京+ OR+text:億度&start=0&rows=10&fl=name,address,tel
      在fl=之後加上了name,adress,tel
      所以結果會如下:
      <result name=”response” numFound=”1340″ start=”0″> <doc> <str name=”name”>北京億度</str> <str name=”address”>北京市海淀區上地軟件園</str> <strname=”tel”>88xxxxxx1</str> </doc> <doc> <str name=”name”>北京億度</str> <str name=”address”/> <strname=”tel”>88xxxxxx1</str> </doc> </result>

    4. 查詢 name 或 address:直接輸入查詢詞, 如: 億度
      送出的內容即為:
      name:億度 AND address:海淀
      若要搜尋聯集結果,請在詞與詞間空格或加上大寫 “OR”(不包含”號).
    5. 例如: text:海淀 OR text:億度
      text:海淀 OR 億度
      海淀 億度
      name:億度 OR tel:88xxxxxx1
      name:億度 tel:88xxxxxx1
    6. 若要搜尋交集結果,請在詞與詞間加上大寫 “AND” 或 “+” (不包含”號).
      例如: text:海淀 AND 億度
      +text:海淀 +text:億度
      name:億度 AND tel:88xxxxxx1
      name: ( +億度 +海淀)
    7. 排除查詢
      在要排除的詞前加上 “-” (不包含”號) 號
      例如: 海淀 -億度
      搜尋結果不會有包含億度的詞的結果在內
    8. Group 搜尋
      使用 “()” 來包含一個group
      如希望搜尋在店名字段內同時有 “台北”(不包含”號) 及 “火車站”(不包含”號)
    9. 增加權重: 如要搜尋 “北京 加油站”(不包含”號) 但因為回傳太多筆資料內有 “中華”(不包含”號) 或 “加油站”(不包含”號) 的結果,
      所以想要把有包含 “加油站”(不包含”號)的數據往前排,可使用 “^”(不包含”號)符號在後面加上愈增加的權重數,
      像是 “2″,則可以這樣做:
      北京 加油站^2
      會同時搜尋含有北京或加油站的結果,並把加油站這個詞加權所以搜尋時會先判斷加油站這一個詞在搜尋結果中的比重,甚至假設一筆數據內加油站出現過兩次以上的就更加會有優先權。
      查詢時在查詢詞後加上 “^” (不包含”號) 再加上權重分數
      例如: 億度 AND “北京”^2
      億度^2 OR 北京

    10. Wildcard 搜尋使用 “*” 符號;如果輸入 “中國*銀” (不包含”號), 結果會有中國信託商業銀行, 中國輸出入銀行圖書閱覽室, 中國商銀證券
      中國及銀之間可夾任何長短字詞.

沒有留言:

張貼留言