solr学习日记···文本分析-tokenizer

上一节配置文本分析的时候谈到了<tokenizer><filter>两个标签,现在先就<tokenizer>标签详细介绍一下。
在solr中定义了一些继承了TokenizerFactory的子类,它们就是<tokenizer>中class属性填的值。这些子类的功能是将获得的文本,如建立索引时的字段文本或查询时的关键字文本按照各自定义的规则分解为一个token流。其中的每个token通常是原始文本的子序列。
我们可以去官方文档中看一下TokenizerFactory的介绍:
(http://lucene.apache.org/core/5_5_5/analyzers-common/org/apache/lucene/analysis/util/TokenizerFactory.html)
介绍
可以看到最下面一行英文,它是解释这个类:用来创建Tokenizer实例的分析工厂的抽象父类。
了解这个父类之后就来看看solr定义了哪些tokenizer:
Standard Tokenizer:

使用方式:<tokenizer class="solr.StandardTokenizerFactory" maxTokenLength="255"/>
参数:solr会忽略超过maxTokenLength长度的字符
规则:以空格和标点符号作为分隔符将文本分解为token流。
例子:email [email protected] by 03-09, re: m37-xq.
->"email", "john.doe", "foo.com", "by", "03", "09", "re", "m37", "xq"

Classic Tokenizer:

使用方式:<tokenizer class="solr.ClassicTokenizerFactory" maxTokenLength="120"/>
参数:solr会忽略超过maxTokenLength长度的字符
规则:与Standard Tokenizer大体相同,以空格和标点符号作为分隔符分隔文本,但它与Standard Tokenizer有两个差别,
    1.识别互联网域名和电子邮件地址 
    2.符号'-'两边如果有数字,那么不会被当做分隔符
例子:email [email protected] by 03-09, re: m37-xq.
->"email", "[email protected]", "by", "03-09", "re", "m37-xq"

Keyword Tokenizer:

使用方式: <tokenizer class="solr.KeywordTokenizerFactory"/>
规则:将原始文本整个作为token,不进行分隔处理

Letter Tokenizer:

使用方式:<tokenizer class="solr.LetterTokenizerFactory"/>
规则:将文本中一段连续的字母字符作为一个token,其它字符抛弃
例子:I am-nihao, wor:ld.
->"I", "am", "nihao", "wor", "ld"

Lawer Case Tokenizer:

使用方式:<tokenizer class="solr.LowerCaseTokenizerFactory"/>
规则:在Letter Tokenizer的基础上将大写字母转化为小写字母
例子:I Am-nihao, Wor:lD.
->"i", "am", "nihao", "wor", "ld"

N-Gram Tokenizer:

使用方式:<tokenizer class="solr.NGramTokenizerFactory" minGramSize="··" maxGramSize="··"/>
参数:
minGramSize:最小长度,默认1,需大于0
maxGramSize:最大长度,默认2,需大于最小长度
规则:根据给定的长度范围生成token流
例子:he l(minGramSize:2 maxGramSize:3)
->"he", "e ", " l", "he ", "e l"

Edge N-Gram Tokenizer:

使用方式:<tokenizer class="solr.EdgeNGramTokenizerFactory" minGramSize="``" maxGramSize="``" side="back|front"/>
参数:
minGramSize:最小长度,默认1,需大于0
maxGramSize:最大长度,默认1,需大于等于最小长度
side:back|front,默认front,表示从左向右(front)还是从右向左(back)按长度取文本
规则:按照给定的长度和取值顺序截取文本,长度范围的每个长度只取一次
例子:babaloo(minGramSize:1 maxGramSize:2 side:front)
-> "b", "ba"
    babaloo(minGramSize:2 maxGramSize:3 side:back)
-> "oo", "loo"

White Space Tokenizer:

使用方式:<tokenizer class="solr.WhitespaceTokenizerFactory" rule="java|unicode" />
参数:
rule:定义怎样定义空格,取值java|unicode
规则:以空格为分隔符分隔文本得到token流

还有一些比较复杂的如针对正则表达式,地址等等的tokenizer,可以在官方文档中了解:
https://lucene.apache.org/solr/guide/7_2/tokenizers.html

猜你喜欢

转载自blog.csdn.net/qq_19656425/article/details/78931757
今日推荐