solr入門——solr基礎及常用查詢

1.solr介紹

1.1 solr是什麼

Solr是構建在Apache的Lucene之上獨立的企業級搜索應用服務器。對外提供類似REST風格的Web Services,用戶可以通過http請求發送指定格式文件到Solr服務器生成索引、更新索引,也可以通過http提出查詢請求並得到指定格式返回結果。

1.2 solr不是什麼

  • Solr不是Google或Baidu這樣的網絡搜索引擎
  • Solr不具備網站搜索引擎優化的功能

2. solr配置文件

solr主要配置文件包括schema.xml、solrconfig.xml等。schema主要定義了solr文檔結構,如果將solr比作數據庫,schemal就類似於表結構

schemal

schemal.xml在solr中的位置如上圖所示,我們在將文檔上傳到solr服務器中,或者更新文本文檔時,會通過文本分析器對上傳的文本進行分析,將分析的結果建立索引存放在lucene中。schemal中定義了字段類型、字段名稱、索引分析器,查詢分析器等信息提供給文本分析使用。

2.1 schemal構成

schema2 Schema構成

  • Fields元素,定義文檔字段
  • Types元素,定義字段類型
  • 其他元素,其他設定uniqueKey、copyField

2.2 fields properties

schema3

  • 包括普通字段和動態字段
  • 字段屬性解釋:
    • name:字段名稱,大小寫敏感
    • type:字段類型
    • indexed:是否創建索引只有index=true 的字段才能做facet.field的字段,同時只有index=true該字段才能當做搜索的內容,當然store=true或者false沒關係,將不需要被用於搜索的,而只是作爲結果返回的field的indexed設置爲false
    • stored:field字段值是否存儲,如果你設置stored=false,就算你有符合的數據看不到該field
    • multiValued:是否多值字段
  • 其他特殊字段如:_version_用於避免併發衝突

2.3 field types

schema4 Types元素

Solr內置了常用的字段類型包括:

  • 字符串字段(string)
  • 數值字段(int,float,long,double,tint,tfloat,tlong,tdouble)
  • 日期字段(date,tdate)
  • 自定義高級字段類型

常見高級字段類型包括索引分析器和查詢分析器,而分析器通常由分詞器、停止詞過濾器、同義詞過濾器、詞元轉換過濾器構成

3. solr查詢控制檯

Solr提供了豐富的基於http協議的接口,同時也提供了方便的管理控制檯,通過控制檯我們可以很便捷的管理solr core、查看solr運行日誌、查詢、分析等。

基本查詢參數:q、fq、sort、(start、rows)、fl、df、Raw Query Parameters、wt、indent、debugQuery、dismax、edismax、hl、facet、spatial、spellcheck

3.1 q(query)

查詢表達式 q=<fieldName>:<searchVal>

  1. 必備詞 kw:海爾 + 空調 kw:海爾 AND 空調 kw:海爾 && 空調
  2. 可選詞 kw:海爾 OR 空調 kw:海爾 || 空調
  3. 詞項鄰近度 kw:“海爾空調”~2 匹配:海爾變頻空調
  4. 字符鄰近度 kw:ihpone~1 匹配:iphone
  5. 排除詞項 kw:海爾 兄弟 不匹配: 海爾兄弟
  6. 區間搜索 閉區間age:[0 TO 100] 0-100 開區間age:{0 TO 100} 1-99
  7. 通配符搜索 * 1個或多個 ? 1個
  8. 權重表達式 海爾空調^10
  9. 特殊字符轉義 +-&&||!(){}[]^"~*?:/ 我&&你=>我&&你

3.2 fq(filter query)

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的區別

  1. 應用場景q一般是用戶輸入的關鍵字如keyword:海爾空調 fq一般是其他過濾條件如category:電器 onsale:1

  2. 參數個數 q參數必選有且只有1個 fq參數可選且可以有多個如:

fq=category:電器&fq=onsale:1

結果等價於

fq=category:電器 AND onsale:1

但是緩存不同上邊的寫法solr會分別緩存category:電器onsale:1的結果

  1. 對得分的影響 q影響搜索結果評分 fq不會影響搜索結果的評分

3.3 其他

排序

id ASC, cmmdtyName DESC

start,rows

分頁開始索引,每頁條數

fl(field list)

字段列表

wt(writer type)

響應格式

wt=json

debugQuery

調試模式

debugQuery=true

dismax 析取最大化查詢解析器

edismax

擴展析取最大化查詢解析器

高亮

hl-highlighth1=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,如果你想禁用,設爲-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段。
  • hl.regex.pattern:正則表達式的pattern
  • hl.regex.slop:這是hl.fragsize能變化以適應正則表達式的因子。默認值是0.6,意思是如果 hlfragsize=100 那麼fragment的大小會從40-160.

參考鏈接

https://blog.csdn.net/wangdong5678999/article/details/80508599

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