Solr是構建在Apache的Lucene之上獨立的企業級搜索應用服務器。對外提供相似REST風格的Web Services,用戶能夠經過http請求發送指定格式文件到Solr服務器生成索引、更新索引,也能夠經過http提出查詢請求並獲得指定格式返回結果。java
solr主要配置文件包括schema.xml、solrconfig.xml等。schema主要定義了solr文檔結構,若是將solr比做數據庫,schemal就相似於表結構正則表達式
schemal.xml在solr中的位置如上圖所示,咱們在將文檔上傳到solr服務器中,或者更新文本文檔時,會經過文本分析器對上傳的文本進行分析,將分析的結果創建索引存放在lucene中。schemal中定義了字段類型、字段名稱、索引分析器,查詢分析器等信息提供給文本分析使用。算法
Schema構成數據庫
Types元素apache
Solr內置了經常使用的字段類型包括:json
常見高級字段類型包括索引分析器和查詢分析器,而分析器一般由分詞器、中止詞過濾器、同義詞過濾器、詞元轉換過濾器構成緩存
Solr提供了豐富的基於http協議的接口,同時也提供了方便的管理控制檯,經過控制檯咱們能夠很便捷的管理solr core、查看solr運行日誌、查詢、分析等。服務器
基本查詢參數:q、fq、sort、(start、rows)、fl、df、Raw Query Parameters、wt、indent、debugQuery、dismax、edismax、hl、facet、spatial、spellcheck網絡
查詢表達式 q=<fieldName>:<searchVal>併發
+
空調 kw:海爾 AND
空調 kw:海爾 &&
空調OR
空調 kw:海爾 ||
空調~2
匹配:海爾變頻空調~1
匹配:iphone–
兄弟 不匹配: 海爾兄弟[0 TO 100]
0-100 開區間age:{0 TO 100}
1-99*
1個或多個 ?
1個^10
fq爲過濾詞,非必選,可有多個值
關閉緩存
fq={!cache false} id:111
過濾順序
添加執行成本,執行成本越低越先執行,成本大於等於100的過濾器被solr視爲後置過濾器
fq={!cost=1}category:電器 fq={!cost=2}onsale:1 fq={!cost=100}star:[5 TO 9]
q和fq的區別
應用場景q
通常是用戶輸入的關鍵字如keyword:海爾空調
fq通常是其餘過濾條件如category:電器 onsale:1
參數個數 q
參數必選有且只有1個 fq
參數可選且能夠有多個如:
fq=category:電器&fq=onsale:1
結果等價於
fq=category:電器 AND onsale:1
可是緩存不一樣上邊的寫法solr會分別緩存category:電器
和onsale:1
的結果
q
影響搜索結果評分 fq
不會影響搜索結果的評分排序
id ASC, cmmdtyName DESC
start,rows
分頁開始索引,每頁條數
fl(field list)
字段列表
wt(writer type)
響應格式
wt=json
debugQuery
調試模式
debugQuery=true
dismax 析取最大化查詢解析器
edismax
擴展析取最大化查詢解析器
hl-highlight
,h1=true
,表示採用高亮。能夠用h1.fl=field1,field2
來設定高亮顯示的字段。
hl.fl
:用空格或逗號隔開的字段列表。要啓用某個字段的highlight功能,就得保證該字段在schema中是stored。若是該參數未被給出,那麼就會高 亮默認字段 standard handler會用df參數,dismax字段用qf參數。你可使用星號去方便的高亮全部字段。若是你使用了通配符,那麼要考慮啓用 。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,若是你想禁用,設爲-1hl.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段。hl.regex.pattern
:正則表達式的patternhl.regex.slop
:這是hl.fragsize能變化以適應正則表達式的因子。默認值是0.6,意思是若是 hlfragsize=100 那麼fragment的大小會從40-160.https://blog.csdn.net/wangdong5678999/article/details/80508599