【Solr】- 分析器 Analyzers

做用:解析用戶傳遞的搜索信息,抽取出關鍵字,而後進行過濾,最後去索引庫檢索,返回用戶須要的信息,例如百度的關鍵字競價機制web


Solr分析器組成:分詞器和過濾器

  • 分詞器:抽取關鍵字
  • 過濾器:過濾關鍵字

Analyzers:分析器

做用:檢查域的文本和生成token stream,分析器經過scheme.xml配置文件中的fieldType元素配置,傳統的搜索時全文匹配,分析器能夠經過分析用戶輸入的文本字符抽取term(關鍵字),進行查詢而後彙總結果,這樣搜索引擎更加智能化apache

簡單案例:schema.xml配置搜索引擎

<fieldType name="nametext" class="solr.TextField">
<analyzer class="org.apache.lucene.analysis.core.WhitespaceAnalyzer"/>
</fieldType>
分析:爲solr.TextField的域類型指定分析器

複雜定義分析器:spa

<fieldType name="nametext" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"/>
</analyzer>
</fieldType>
分析:Field的Text首先被傳遞給第一個solr.StandardTokenizerFactory,最後一個組件產生terms,詞語,用於索引或查詢nameText類型的field

注意:code

org.apache.solr.analysis包裏面的類能夠直接被引用爲solr.爲前綴的類 例: solr.EnglishPorterFilterFactory 等價於 org.apache.solr.analysis. EnglishPorterFilterFactoryxml

Analyzer會影響在給定Filed裏面索引的term,可是不會影響其實際存儲的值blog

Analysis Phases:分析階段*

分析發生在2種狀況:索引

  1. 索引節點: 創建索引的時候Filed被建立時,語句分析生成的Token Stream被添加到索引而且TokenStream定義了Field的語句集
  2. 查詢階段:搜索的值被解析,而且匹配的結果語句集被保存在Field的索引

一般一樣的分應用於index/query兩個階段,當進行準確的字符串匹配時效果使人滿意,在其餘的狀況下索引和查詢階段能夠輕微不一樣token

多語句擴展分析

一些狀況下Analysis處理不是天然語言,像同義詞、過濾的中止詞Analysis Factory能夠在進行這種類型的查詢,例如小寫處理,分析工廠典型MultiTermAwareComponent,當solr對多語句集的結果執行查詢分析事,只有MultiTermAwareComponent能用於查詢分析器中,其餘的Factory會被忽略字符串

<fieldType name="nametext" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="syns.txt"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<!-- No analysis at all when doing queries that involved Multi-Term expansion -->
<analyzer type="multiterm">
<tokenizer class="solr.KeywordTokenizerFactory" />
</analyzer>
</fieldType>

分詞器:Tokenizer

做用:分詞器主要用於拆分文本流爲Tokens,每一個Token是文本流的一個子串,分析器直到solr配置的Field,可是Tokenizer不知道,所以分詞器只是進行簡單的拆分工做


中文分詞器ikAnalyzer配置步驟:

  1. 引入分詞器jar包(ikAnalyzer2012_FF_u1)到lib目錄中:solr/web-inf/lib
  2. 複製IKAnalyzer的配置文件和自定義詞典和停用詞典到solr的classpath目錄下
  3. 配置fieldType指定使用中文分詞器:注意analyzer和tokenizer的區分
<fieldType name="text_ik" class="solr.TextField">
      <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> 
</fieldType>

4.配置Field使用ik分詞器的fieldType

<field name="title_ik" type="text_ik" indexed="true" stored="true"/>
<field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true" />

效果:

注意:新版本的solr可能和IK分詞器不兼容,需修改IK分詞器源碼

相關文章
相關標籤/搜索