solr7.1.0学习笔记(8)---配置文件managed-schema(schema.xml)-analyzer,tokenizer

有些时候,我们需要自定义 fieldType。下面的例子就是自定义的 fieldType,<analyzer type="index"> 表示索引时怎么处理,<analyzer type="query">表示查询时怎么处理。

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
      <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <!-- 本例中,我们只在查询时应用同义词
        <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
        -->
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
      <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
      </analyzer>
    </fieldType>

 tokenizer: 对输入流进行分词。这里的“solr.” 代表:org.apache.solr.analysis. 这个包
filter: 对tokenizer输出的每一个分词,进行处理。

Tokenizer:

1、solr.StandardTokenizerFactory:

         把文本用空格和标点符号分割。对于小数点(.),如果后面不是空格的话,将会被保留。如网址。连字符(-)的两边会被分割成两个分词(token)。
        参数:maxTokenLength  分词的最大长度,超出部分将被忽略。

         example: 

<analyzer>
    <tokenizer class="solr.StandardTokenizerFactory" maxTokenLength="100"/>
</analyzer>

        输入:   Please email john.doe@foo.com by 03-09, re: m37-xq.
        输出:   "Please", "email", "john.doe", "foo.com", "by", "03", "09", "re", "m37", "xq"

2、solr.ClassicTokenizerFactory:

        跟StardardTokenizerFactory差不多,不同点如下:
                (1)连字符(-)两边如果有数字的话,将不会被拆分。
                (2)能识别邮件地址
        参数:maxTokenLength  分词的最大长度,超出部分将被忽略。
        示例:
        输入:   Please email john.doe@foo.com by 03-09, re: m37-xq.
        输出:   "Please", "email", "john.doe@foo.com", "by", "03-09", "re", "m37-xq"

3、solr.KeywordTokenizerFactory:

        整个文本做为一个分词。
        示例:
        输入:   Please email john.doe@foo.com by 03-09, re: m37-xq.
        输出:   “Please email john.doe@foo.com by 03-09, re: m37-xq"

4、solr.LetterTokenizerFactory:
        连续的字母做为一个分词。
        示例:
        输入:   I can't.
        输出:   “I", "can", "t"

5、solr.LowerCaseTokenizerFactory
        按非字母进行分词,并转化成小写。
        示例:
        输入:   I LOVE my iPhone.
        输出:   “I", "love", "my", "iphone"

6、solr.NGramTokenizerFactory
        对文本按照 n-Gram 进行分词。
        参数:minGramSize (default 1) -- 必须 > 0
        maxGramSize (default 2) -- 必须 >= minGramSize
        示例:
        输入:   hey man
        输出:   “h", "e", "y", " ", “m", "a", "n", "he", “ey", "y ", " m", "ma", "an"

7、solr.EdgeNGramTokenizerFactory
        对文本按照 n-Gram 进行分词。
        参数:minGramSize (default 1) -- 必须 > 0
        maxGramSize (default 1) -- 必须 >= minGramSize
        side (default "front") -- "front" or "back"
        示例:
        输入:   babaloo
        输出(default):   “b"
        输出(minGramSize=2, maxGramSize=5):"ba", "bab", "baba", "babal"

8、solr.ICUTokenizerFactory
        对多语言文本,基于其语言特性,进行恰当地分词。
        参数:rulefile-- 此值的格式:  四个字母的语言代码+“:”+文件路径

<analyzer>
    <tokenizer class="solr.ICUTokenizerFactory" rulefile="Latn:my.Latin.rule.rbbi,Cyrl:my.Cyrillic.rules.rbbi"/>
</analyzer>

        注意:需要添加额外的jar包到Solr 的 classpath下。

9、solr.PathHierarchyTokenizerFactory
        用replace指定的字符代替delimiter指定的字符,并进行分词
        参数:delimiter (no default) 
        replace (no default)  
        示例:

<analyzer>
    <tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="\" replace="/"/>
</analyzer>

        输入:   d:\usr\local\apache
        输出:   "d:", "d:/usr", "d:/usr/local", "d:/usr/local/apache"

10、solr.PatternTokenizerFactory
        利用Java的正则表达式进行分词。
        参数:pattern -- 必填
        group --   可选。默认 -1 。

                -1 表示正则表达式作为分割符。0 表示符合正则表达式的才会被认为是一个分词而保留。大于0的值(比如2)表示只保留符合正则表        达式的部分中的第2个部分。

        示例:

<analyzer>
    <tokenizer class="solr.PatternTokenizerFactory" pattern="\s*\s*" />
</analyzer>
        输入:   fee,fie, foe , fun,  foo
        输出:   "fee", "fie", "foe", "fun", "foo"
        示例:
<analyzer>
    <tokenizer class="solr.PatternTokenizerFactory" pattern="[A-Z][A-Za-z]*" group="0"/>
</analyzer>
        输入:   Hello, My name is Rose.
        输出:   "Hello", "My", "Rose"

11、 solr.UAX29URLEmailTokenizerFactory
        空格和标点符号做为分割符。小数点如果后面不是空格,则被保留。连接符(“-”)连起来的各个部分将被划分为独立的分词,除非其中包含数字。网址、Email、IP地址将会被认为一个整体。
        参数:maxTokenLength -- 长度超过此值的分词将会被截断。

12、solr.WhitespaceTokenizerFactory
        仅将空格做为分割符。
        参数:rule -- "java": 默认值,利用Character.isWhitespace(int)确定是否是whitespace。 “unicode”: 利用Unicode的whitespace做为分割符。

此文是参考别人的博客,点击“跳转”可以跳转到对方博客。

上一节:solr7.1.0学习笔记(7)---配置文件managed-schema(schema.xml)-如何定义动态字段dynamicField和复制字段

下一节:solr7.1.0学习笔记(9)---配置文件managed-schema(schema.xml)-样例



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值