共計 3019 個字符,預計需要花費 8 分鐘才能閱讀完成。
這篇文章主要講解了“SOLR 查詢語法有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“SOLR 查詢語法有哪些”吧!
一. 基本查詢
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, 后面 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 – 默認的查詢字段,一般默認指定
qt –(query type)指定那個類型來處理查詢請求,一般不用指定,默認是 standard。
– 排除在要排除的詞前加上“-”(不包含”號) 號
其它
indent – 返回的結果是否縮進,默認關閉,用 indent=true|on 開啟,一般調試 json,php,phps,ruby 輸出才有必要用這個參數。
version – 查詢語法的版本,建議不使用它,由服務器指定默認值。
[Solr 的檢索運算符]
“:”指定字段查指定值,如返回所有值 *:*2
“?”2表示單個任意字符的通配
“*”表示多個任意字符的通配(不能在檢索的項開始使用 * 或者? 符號)2
“~”2表示模糊檢索,如檢索拼寫類似于”roam”的項這樣寫:roam~ 將找到形如 foam 和 roams 的單詞;roam~0.8,檢索返回相似度在 0.8 以上的記錄。
2鄰近檢索,如檢索相隔 10 個單詞的”apache”和”jakarta”,”jakarta apache”~10
“^”2控制相關度檢索,如檢索 jakarta apache,同時希望去讓”jakarta”的相關度更加好,那么在其后加上”^”符號和增量值,即 jakarta^4 apache
布爾操作符 AND、||2
布爾操作符 OR、2
布爾操作符 NOT、!、-2(排除操作符不能單獨與項使用構成查詢)
“+”存在操作符,要求符號”+”后的項必須在文檔相應的域中存在2
() 用于構成子查詢2
2 [] 包含范圍檢索,如檢索某時間段記錄,包含頭尾,date:[200707 TO 200710]
{}2不包含范圍檢索,如檢索某時間段記錄,不包含頭尾
date:{200707 TO 200710}
”轉義操作符,特殊字符包括 + – | ! () {} [] ^”~ * ? :“
二. 高亮
hl-highlight,h2=true,表示采用高亮。可以用 h2.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.
感謝各位的閱讀,以上就是“SOLR 查詢語法有哪些”的內容了,經過本文的學習后,相信大家對 SOLR 查詢語法有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!