zoukankan      html  css  js  c++  java
  • solr5.5教程-Analyzer、Tokenizer、Filter

    对于文本,solr在建立索引和搜索的时候需要对其做一定的处理(比如英文要去掉介词、转成小写、单词原形化等,中文要恰当地要分词)。这些工作,一般由Analyzers、Tokenizers、和Filter来实现。这三个东东配置在fieldType中。下面分别介绍一下

    1、analyzer:告诉solr在建立索引和搜索的时候,如何处理text类型的内容,比如要不要去掉“a”、去掉介词、去掉复数,要不要全部变成小写等等……它在schema.xml文件中配置,可以直接指定一个类给它;也可以由tokenizer和filter的组合来实现。

         此结点有几个参数:

    • type:可选参数,index或query,表名这个配置是在建立索引还是在搜索的时候使用
    • tokenizer:分词器,比如:StandardTokenizerFactory
    • filter:过滤器,比如:LowerCaseFilterFactory,小写转换

    2、tokenizer:在analyzer结点内,指定analyzer的分词器。

    3、filter:过滤器,比如:LowerCaseFilterFactory,小写转换

    下面是一个配置的例子:

    <fieldType name="text_ik" class="solr.TextField">   
            <analyzer type="index" useSmart="false">
                <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/>
            </analyzer>
            <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
    </fieldType>
    Tokenizer和Filter的区别
    • Tokenizer:接收text(通过从solr那里获得一个reader来读取文本),拆分成tokens,输出token stream
    • Filter:接收token stream,对每个token进行处理(比如:替换、丢弃、不理),输出token stream
    因此,在配置文件中,Tokenizer放在第一位,Filter放在第二位直到最后一位。
     
     
    对于简单的英文文本,可以这样配置(使用空格分词器,不需要tokenizer和filter):
    <fieldType name="nametext" class="solr.TextField">
        <analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer"/>
    </fieldType>

     

    一般情况下,需要更多的处理,比如:
    <fieldType name="nametext" class="solr.TextField">
        <analyzer type="index">
            <tokenizer class="solr.StandardTokenizerFactory"/>
            <filter class="solr.StandardFilterFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.StopFilterFactory"/>
            <filter class="solr.EnglishPorterFilterFactory"/>
        </analyzer>
    </fieldType>
    注:type="index"或"type="query" 这个参数如果没有,则表示两种都适用。
    注:那些Factory并不是真正的tokenizer或filter,而是负责创建一个实现tokenizer接口的类。
    注:由于filters是顺序执行的,前一个的结果是后一个是输入,所以,一般通用的处理放在前面,特殊的处理靠后
     
    这些tokenizer和filter是顺序执行的,在建索引的情况下,最后一个filter EnglishPorterFilterFactory的输出,就会被用来建立索引。而原文本是不会变的,比如A Red Cow的索引是red, cow,但原文件还是保持Many Cows。
     
    tokenizer和filter的配置还可以接收额外的参数:
    <fieldType name="semicolonDelimited" class="solr.TextField">
        <analyzer type="query">
            <tokenizer class="solr.PatternTokenizerFactory" pattern="; "/>
            <filter class="solr.LengthFilterFactory" min="2" max="7"/>
        <analyzer>
    </fieldType>
  • 相关阅读:
    简体中文和繁体中文的转换
    EasyPoi 快速Office 开发
    玩转SpringBoot之定时任务详解
    Spring Boot中使用Swagger2构建强大的RESTful API文档
    一篇文章带你搞懂 SpringBoot与Swagger整合
    JAVA团队开发手册
    CentOS(6、7)修改主机名(hostname)
    SpringBoot多环境部署,在启动时动态设置相应的配置文件
    MyBatis逆向工程代码的生成以及使用详解(持续更新)
    MySQL写入插入数据优化配置
  • 原文地址:https://www.cnblogs.com/yinkh/p/5632073.html
Copyright © 2011-2022 走看看