Tokenizer

Tokenizer 的工作是将文本流分解为令牌,其中每个令牌(通常)是文本中字符的子序列。分析器知道它配置的字段,但 tokenizer 不是。Tokenizers 从字符流(Reader)中读取并生成一系列令牌对象(TokenStream)。

输入流中的字符可能被丢弃,如空格或其他分隔符。也可以添加或替换它们,例如将别名或缩写映射到规范化的窗体。令牌包含除文本值之外的各种元数据,例如字段中令牌出现的位置。由于 Tokenizer 可能会产生与输入文本不一致的标记,因此不应假定该标记的文本与字段中出现的文本相同,或者其长度与原始文本相同。也可能有多个令牌具有相同的位置或引用原始文本中的相同偏移量。请记住,如果您使用令牌元数据来突出显示字段文本中的搜索结果。

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

在 tokenizer 元素中命名的类不是实际的 tokenizer,而是实现 TokenizerFactory API 的类。这个工厂类将被调用来根据需要创建新的 tokenizer 实例。由工厂创建的对象必须来自于 Tokenizer,这表示它们产生令牌序列。如果令牌生成器产生可以按原样使用的令牌,则它可能是分析器的唯一组件。否则,tokenizer 的输出标记将作为流水线中第一个过滤器阶段的输入。

TypeTokenFilterFactory 可用与创建 TypeTokenFilter 根据在 factory.getStopTypes 中设置的 TypeAttribute。

Filter

与分词一样,Solr 过滤器消耗输入并产生一个令牌流。过滤器也来自于 org.apache.lucene.analysis.TokenStream。与分词不同,过滤器的输入是另一个TokenStream。过滤器的工作通常比 tokenizer 更容易,因为在大多数情况下,过滤器会依次查看流中的每个标记,并决定是否将其传递、替换或丢弃。

过滤器也可以通过预先考虑多个令牌来进行更复杂的分析,尽管这种情况不常见。这种过滤器的一个假设的用法可能是规范化将被标记为两个单词的状态名称。例如,单个标记 “california” 将被替换为 “CA”,而令牌对 “rhode” 后面跟着 “island” 将变成单个令牌 “RI”。

因为过滤器消耗一个 TokenStream 并产生一个新的过滤器 TokenStream,它们可以无限地连续链接在一起。链中的每个过滤器反过来处理由其前置生成的令牌。因此,指定过滤器的顺序非常重要。通常,首先进行最常规的过滤,稍后的过滤阶段更专业化。

<fieldType name="text" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"/>
</analyzer>
</fieldType>

这个例子从 Solr 的标准 tokenizer 开始,它将字段的文本分解为令牌。然后,这些令牌通过 Solr 的标准过滤器,从首字母缩略词中删除点,并执行一些其他的常见操作。所有的令牌都被设置为小写,这将有利于在查询时不区分大小写的匹配。

上例中的最后一个过滤器是使用 Porter 干扰算法的干涉过滤器。词干分析器基本上是一套映射规则,将单词的各种形式映射回它们派生出来的基础词或词干。例如,在英语中,“hugs”,“hugging” 和 “hugged” 这两个词都是词干 “hug” 的所有形式。词干将用 “hug” 来代替所有这些词语,这将被索引。这意味着对 “hug” 的查询将匹配术语 “hugged”,而不是 “huge”。

相反,将词干应用于查询条件将允许包含非词干术语(例如“hugging”)的查询匹配具有相同词干的不同变体(例如“hugged”)的文档。这是可行的,因为索引器和查询都将映射到相同的词干(“hug”)。

词干明显地是非常特定于语言的。Solr 包含了几个基于 Porter 干扰算法的由 Snowball 生成器创建的特定于语言的干预器。通用的 Snowball Porter Stemmer Filter可用于配置这些语言分析器。Solr 还为 English Snowball 词干提供了一个便利的包装。还有几种专门为非英语语言设计的词干。这些词干在语言分析中有描述。

solr中的Tokenizer Filter的更多相关文章

  1. Solr中Schema.xml中文版

    <?xml version="1.0" encoding="UTF-8" ?> <!-- Licensed to the Apache Sof ...

  2. Lucene 中的Tokenizer, TokenFilter学习

      lucene中的TokenStream,TokenFilter之间关系   TokenStream是一个能够在被调用后产生语汇单元序列的类,其中有两个类型:Tokenizer和TokenFilte ...

  3. 在Solr中配置中文分词IKAnalyzer

    李克华 云计算高级群: 292870151 交流:Hadoop.NoSQL.分布式.lucene.solr.nutch 在Solr中配置中文分词IKAnalyzer 1.在配置文件schema.xml ...

  4. 在Solr中配置和使用ansj分词

    在上一节[编译Ansj之Solr插件]中介绍如何编译ansj分词在solr(lucene)环境中使用的接口,本章将介绍如何在solr中使用ansj,其步骤主要包括:下载或者编译ansj和nlp-lan ...

  5. Solr 08 - 在Solr Web管理页面中查询索引数据 (Solr中各类查询参数的使用方法)

    目录 1 Solr管理页面的查询入口 2 Solr查询输入框简介 3 Solr管理页面的查询方案 1 Solr管理页面的查询入口 选中需要查询的SolrCore, 然后在菜单栏选择[Query]: 2 ...

  6. solr中Cache综述

    一.概述 Solr查询的核心类就是SolrIndexSearcher,每个core通常在同一时刻只由当前的SolrIndexSearcher供上层的handler使用(当切换SolrIndexSear ...

  7. 在Lucene或Solr中实现高亮的策略

    一:功能背景 近期要做个高亮的搜索需求,曾经也搞过.所以没啥难度.仅仅只是原来用的是Lucene,如今要换成Solr而已,在Lucene4.x的时候,散仙在曾经的文章中也分析过怎样在搜索的时候实现高亮 ...

  8. Angularjs在控制器(controller.js)的js代码中使用过滤器($filter)格式化日期/时间实例

    Angularjs内置的过滤器(filter)为我们的数据信息格式化提供了比较强大的功能,比如:格式化时间,日期.格式化数字精度.语言本地化.格式化货币等等.但这些过滤器一般都是在VIEW中使用的,比 ...

  9. solr与.net系列课程(八)solr中重跑索引的注意事项

    solr与.net系列课程(八)solr中重跑索引的注意事项 我们如果在项目中使用solr,那肯定就是把数据库中的数据跑进solr服务器中,solr有两种操作一种是新建索引,一种是增量索引,这里我们来 ...

随机推荐

  1. Python 字符串太长分行写

    原文:https://blog.csdn.net/peng__dada/article/details/79138135 #第一种:三个单引号 print '''我是一个程序员       我刚开始学 ...

  2. macOS 将【允许从以下位置下载的应用】设置为:任意来源

    用管理员帐号进入Terminal: 1) 输入:sudo spctl --master-disable ,回车: 2) 重新进入该设置页面即可看到已生效:

  3. python之unittest

    unittest是单元测试的一个框架 在说unittest之前,先说几个概念: TestCase 也就是测试用例 TestSuite 多个测试用例集合在一起,就是TestSuite TestLoade ...

  4. Coloring Trees CodeForces - 711C

    Coloring Trees CodeForces - 711C 题意:有n个点,每个点有一个c值,如果为0表示它没有被染色,否则表示它被染成了c值的颜色.颜色有1到m.把第i棵树染成颜色j所需要的代 ...

  5. 构造 Bubble Cup 8 - Finals D. Tablecity

    题目传送门 题意:在1000*2的格子里,在每个小时能派出两个警察在两个地点搜查小偷,求在2015小时内能抓住小偷的方案. 分析:首先每次扫过一列即i1 i2从左往右扫,这样会漏掉小偷正好从间隙穿过的 ...

  6. SpringMVC-核心配置文件spring-mvc.xml

    @Spring-MVC.xml @MVC的注解驱动 Bean模式 上面源码的配置我们看到了,其中映射器和适配器的注解模式是过时的所以我们需要重新配置一下. <!-- 配置处理器映射器 --> ...

  7. Linux--NiaoGe-Service-01

    安装环境介绍 CentOS 6.9_x86_64 我们选择的是基本安装,也即“Basic Server”. 安装完成后重启来到(runlevel 3)纯文本界面. 例题 批量创建账号:假设有5个账号x ...

  8. rhel 6.5--samba

    配置匿名共享: 服务端: [root@master ~]# yum install -y samba 或者 [root@master ~]# yum groupinstall -y "CIF ...

  9. 【学习笔记】深入理解js原型和闭包(13)——【作用域】和【上下文环境】

    上文简单介绍了作用域,本文把作用域和上下文环境结合起来说一下,会理解的更深一些. 如上图,我们在上文中已经介绍了,除了全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了.而不 ...

  10. 8 Explicit Animations 指明的动画 笔记

    8 Explicit Animations 指明的动画 笔记     If you want something done right, do it yourself. 如果你想让事情做好,那就自动来 ...