1. 程式人生 > >solr查詢引數使用說明

solr查詢引數使用說明

  • q – 查詢字串,必須的。Solr 中用來搜尋的查詢。有關該語法的完整描述,請參閱 參考資料 中的 “Lucene QueryParser Syntax”。可以通過追加一個分號和已索引且未進行斷詞的欄位的名稱來包含排序資訊。預設的排序是 score desc,指按記分降序排序。           q=myField:Java AND otherField:developerWorks; date asc此查詢搜尋指定的兩個欄位並根據一個日期欄位對結果進行排序。
  • 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, 後面 solr 1.3增加的,要用通知我們,因為預設沒有開啟。
  • fq – (filter query)過慮查詢,作用:在q查詢符合結果中同時是fq查詢符合的,
  • fl- field作為逗號分隔的列表指定文件結果中應返回的 Field
     集。預設為 “*”,指所有的欄位。“score” 指還應返回記分。例如 *,score
    將返回所有欄位及得分。用solrj的bean時,得在query中指定 query.set("fl", "*,score");
  • q.op – 覆蓋schema.xml的defaultOperator(有空格時用"AND"還是用"OR"操作邏輯),一般預設指定
  • df – 預設的查詢欄位,一般預設指定
  • qt – (query type)指定那個型別來處理查詢請求,一般不用指定,預設是standard。
  • indent – 返回的結果是否縮排,預設關閉,用 indent=true|on 開啟,一般除錯json,php,phps,ruby輸出才有必要用這個引數。
  • version – 查詢語法的版本,建議不使用它,由伺服器指定預設值。

hight:
     hl-highlight,h1=true,表示採用高亮。可以用h1.fl=field1,field2 來設定高亮顯示的欄位。

  • hl.fl: 用空格或逗號隔開的欄位列表。要啟用某個欄位的highlight功能,就得保證該欄位在schema中是stored。如果該引數未被給出,那麼就會高 亮預設欄位 standard handler會用df引數,dismax欄位用qf引數。你可以使用星號去方便的高亮所有欄位。如果你使用了萬用字元,那麼要考慮啟用 hl.requiredFieldMatch選項。
  • hl.requireFieldMatch:
    如果置為true,除非該欄位的查詢結果不為空才會被高亮。它的預設值是false,意味 著它可能匹配某個欄位卻高亮一個不同的欄位。如果hl.fl使用了萬用字元,那麼就要啟用該引數。儘管如此,如果你的查詢是all欄位(可能是使用 copy-field 指令),那麼還是把它設為false,這樣搜尋結果能表明哪個欄位的查詢文字未被找到
  • hl.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,如果你想禁用,設為-1
  • hl.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段。
    regex 的fragmenter有如下選項:
  • hl.regex.pattern:正則表示式的pattern
  • hl.regex.slop:這是hl.fragsize能變化以適應正則表示式的因子。預設值是0.6,意思是如果hl.fragsize=100那麼fragment的大小會從40-160.

這些值都可以在select中加入,也可以用solrj的api去設定,也可以配置在solrconfig.xml中配置。
示例如下:
<requestHandler name="search" class="solr.SearchHandler" default="true">
    <!– default values for query parameters can be specified, these
         will be overridden by parameters in the request
      –>
     <lst name="defaults">
       <str name="echoParams">explicit</str>
       <int name="rows">10</int>
       <bool name="hl">true</bool> 
       <str name="hl.fl">title,content</str>  
       <str name="f.content.hl.fragsize">200</str>
       <str name="mlt.qf">
         id^10.0 title^10.0 content^1.0
       </str>
     </lst>
</requestHandler>

solr用著還是不錯,比自己去搞Lucene好多了,可以加上jsoup去抓網頁指定的內容,再配置下xml,用solrj寫個好看的搜尋頁面。有空自己用grails寫一個玩下看。