solr學習之六--------Analyzer(分析器)、Tokenizer(分詞器)

首先,不知道大家在前面的例子中沒有試着搜索文本串,就是在第二節,我們添加了很多文檔。如果字段值是一個文本。你如果只搜索這個字段的某個單詞,是不是發現搜不到?

這就是因爲我們沒有配置Analyzer,因此在搜索的時候會“全匹配”。可以從直觀感覺上理解爲SQL的  like和= 的區別。


通過前面這段引文,我們就能知道:Analyzer就是分析我們的文本的。


一般來說:solr.TextField類型的字段才需要分析器。

最簡單的配置分析器的如下:

<fieldType name="nametext" class="solr.TextField">
<analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer"/>
</fieldType>

其實分析器(Analyzer)還可以包括一個分詞器(Tokenizer)和多個過濾器(filter),這2個東西,是爲了實現更復雜的場景,我們後續再講。

分析器一般出現在2個環境:建索引(index)和查詢(query),大多數情況下這2個場景的分析過程都是一樣,也就是說用的是相同的分析器。但是,你仍然可以爲2個不同的階段指字不同的分析器:

<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>
</fieldType>

同過 type來指階段。




Tokenizer:

  分詞器,從字面意思都可以理解,就是將句子拆成一個個的詞(或者是詞組),比如A B C D,可以拆成A,B,C,D4個單獨的單詞,也有可能拆成AB,CD  或者其它。。。。 這個就看你分詞規則了。

  使用如下:

<fieldType name="text" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
</analyzer>
</fieldType>

值 得注意的是:這裏配的class是Factory,而不是真正的分詞器,他是通過工廠類來創建分詞器實例的。所有的工廠類,必須實現org.apache.solr.analysis.TokenizerFactory

工廠的產出物,也必須派生至:org.apache.lucene.analysis.TokenStream


Filter:

   就是經過Tokenizer分詞之後,再再行的繼續處理,比如全轉成小寫,時態處理, 去掉語氣詞等。。。





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