zoukankan      html  css  js  c++  java
  • 1.5.2 什么是Analyzer--分析器

      分析器检查字段的文本,然后生成一个token流.在schema.xml中,分析器作为<fieldType>的一个子元素.在普通的使用当中,只有字段类型solr.TextField使用分析器.配置分析器最简单的方式就是使用一个<analyzer>元素,它的class属性是一个java的类名.  

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

      在这个例子中,类WhitespaceAnalyzer主要负责分析TextField类型数据的内容并发出相应的tokens.举一个简单的例子,纯英文散文,像这样一个简单的分析器类已经足够了,但是对于字段内容,需要做更多的复合分析.

      甚至大部分的复合分析要求都能分解成一系列的独立元件.不久你就会发现,solr的distribution部分提供了很多的分词器(tokenizer)和过滤器(filter)的选择,设置一个分词器链非常的简单直接.

      举例:

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

      注意:包名 org.apache.solr.analysis可以直接通过solr. 来关联.

      在这个例子中,没有在<analyzer>中指定class属性.而是更多专门的类的序列连在一起构成<analyzer>,充当字段的分析器.字段的文本通过这个列表的第一个条目( solr.StandardTokenizerFactory),从最后一个标记(solr.EnglishPorterFilterFactory)出现的tokens,用于索引和查询.

    分析阶段

      分析发生在两处环境当中,在建立索引的时候,当一个字段被创建,分析产生的token流被添加到索引中,为字段定义条目(term)的设置(包含 positions, sizes等等).在查询的时候,搜索的文字会被分析,产生的条目(terms)会去匹配字段索引中的条目.

      在很多时候,相同的分析用于这两个阶段-索引和查询.但是有些时候可能会有轻微的不同.

      如果提供了一个简单的如上的<analyzer>,那么它将用于索引和查询,如果你想要为每个阶段分开使用分析器,你需要在字段类型中包含两个分析器.如下:

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

      在这个假设的例子中,在索引的时候,文本会被分词,然后词(tokens)转化为小写,任何没有列在文件keepwords.txt中的词(token)都会被丢弃.然后这些保留下来的词可以映射到syns.txt中词.在查询的时候,做的规范处理只是小写处理.

  • 相关阅读:
    【转】Java并发编程:并发容器之ConcurrentHashMap
    【转】Java HashMap的死循环
    【转】ArrayList与LinkedList的区别和适用场景
    【转】浅谈Java中的hashcode方法
    【转】HashMap实现原理及源码分析
    【计算机二级C语言】卷015
    【计算机二级C语言】卷014
    【计算机二级C语言】卷013
    【计算机二级C语言】卷012
    【计算机二级C语言】卷011
  • 原文地址:https://www.cnblogs.com/a198720/p/4302507.html
Copyright © 2011-2022 走看看