摘要: Solr的分词器(Tokenizers)用来将文本流分解成一系列的标记(tokens)。分析器analyzer 受字段配置的影响,分词器(Tokenizers)于此无关。分析器主要是把字符流(character stream )处理成一系列的标记对象(Token objects)。参见原文。

分词器说明

输入流中很些信息可能是不需要的,比如空格和标点;有些信息是需要添加的,如同义词/别名;有些信息需要替换,如缩略语等。这样,分析器处理后的一个标记(token)包含很多信息。
例如:

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

这里的StandardTokenizerFactory并不是真正的分词器,而是所有实现该TokenizerFactory的API。这个工厂类将在需要创建新的tokenizer 时被调用。它的create()方法接受一个Reader参数(即字符流)并返回一个TokenStream(即标记流)。创建对象的工厂必须源自Tokenizer。除非你要使用tokenizer 生成的标记(token),否则都应该将结果传送给下级的过滤器(filter)。

分词器种类

Standard Tokenizer

这个Tokenizer将文本的空格和标点当做分隔符。
注意,你的Email地址(含有@符合)可能会被分解开;用点号(就是小数点)连接的部分不会被分解开。对于有连字符的单词,也会被分解开。

参数 说明
maxTokenLength 整数,默认255 超过此长度的字符会被忽略

举例:

<analyzer><tokenizer class="solr.StandardTokenizerFactory"/>
</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”

Classic Tokenizer

基本与Standard Tokenizer相同。
注意,用点号(就是小数点)连接的部分不会被分解开;用@号(Email中常用)连接的部分不会被分解开;互联网域名(比如wo.com.cn)不会被分解开;有连字符的单词,如果是数字连接也会被分解开。

参数 说明
maxTokenLength 整数,默认255 超过此长度的字符会被忽略

例如:

<analyzer><tokenizer class="solr.ClassicTokenizerFactory"/>
</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”

Keyword Tokenizer

把整个输入文本当做一个整体。
没有参数。
例如:

<analyzer><tokenizer class="solr.KeywordTokenizerFactory"/>
</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.”

Letter Tokenizer

只处理字母。
没有参数。
例如:

<analyzer><tokenizer class="solr.LetterTokenizerFactory"/>
</analyzer>

输入: “I can’t.”
输出: “I”, “can”, “t”

Lower Case Tokenizer

以非字母元素分隔,将所有的字母转化为小写。
没有参数。
例如:

<analyzer><tokenizer class="solr.LowerCaseTokenizerFactory"/>
</analyzer>

输入: “I just LOVE my iPhone!”
输出: “i”, “just”, “love”, “my”, “iphone”

N-Gram Tokenizer

将输入文本转化成指定范围大小的片段。
注意,空格也会被当成一个字符处理。

参数 说明
minGramSize 整数,默认1 指定最小的片段大小,需大于0
maxGramSize 整数,默认2 指定最大的片段大小,需大于最小值

例如:

<analyzer><tokenizer class="solr.NGramTokenizerFactory"/>
</analyzer>

输入: “hey man”
输出: “h”, “e”, “y”, ” “, “m”, “a”, “n”, “he”, “ey”, “y “, ” m”, “ma”, “an”

注意,这里的空格会被当成一个字符,所以会有一个空的token,此外,”m”和” m”,还有”y”和”y “是不同的,后者都含有一个空格符。

例如:

<analyzer><tokenizer class="solr.NGramTokenizerFactory" minGramSize="4" maxGramSize="5"/>
</analyzer>

输入: “bicycle”
输出: “bicy”, “bicyc”, “icyc”, “icycl”, “cycl”, “cycle”, “ycle”

Edge N-Gram Tokenizer

用法和N-Gram Tokenizer类似。

参数 说明
minGramSize 整数,默认1 指定最小的片段大小,需大于0
maxGramSize 整数,默认1 指定最大的片段大小,需大于或等于最小值
side “front” 或 “back”, 默认”front” 指定从哪个方向进行解析

例如:

<analyzer><tokenizer class="solr.EdgeNGramTokenizerFactory" />
</analyzer>

输入: “babaloo”
输出: “b”

例如:

<analyzer><tokenizer class="solr.EdgeNGramTokenizerFactory" minGramSize="2" maxGramSize="5"/>
</analyzer>

输入: “babaloo”
输出: “ba”, “bab”, “baba”, “babal”

例如:

<analyzer><tokenizer class="solr.EdgeNGramTokenizerFactory" minGramSize="2" maxGramSize="5" side="back"/>
</analyzer>

输入: “babaloo”
输出: “oo”, “loo”, “aloo”, “baloo”

Regular Expression Pattern Tokenizer

可以指定正则表达式来分析文本。

参数 说明
pattern 必选项 正规表达式
group 数字,可选,默认-1 负数表示用正则表达式做分界符;非正数表示只分析满足正则表达式的部分;0表示满足整个正则表达式;大于0表示满足正则表达式的第几个括号中的部分

例如:

<analyzer><tokenizer class="solr.PatternTokenizerFactory" pattern="\s*,\s*"/>
</analyzer>

输入: “fee,fie, foe , fum”
输出: “fee”, “fie”, “foe”, “fum”

例如:

<analyzer><tokenizer class="solr.PatternTokenizerFactory" pattern="[A-Z][A-Za-z]*" group="0"/>
</analyzer>

输入: “Hello. My name is Inigo Montoya. You killed my father. Prepare to die.”
输出: “Hello”, “My”, “Inigo”, “Montoya”, “You”, “Prepare”

这里的group为0,表示必须满足整个表达式,正则表达式的含义是以大写字母开头,之后是大写字母或小写字母的组合。

例如:

<analyzer><tokenizer class="solr.PatternTokenizerFactory" pattern="(SKU|Part(\sNumber)?):?\s(\[0-9-\]+)" group="3"/>
</analyzer>

输入: “SKU: 1234, Part Number 5678, Part: 126-987”
输出: “1234”, “5678”, “126-987”

这个group等于3,表示满足第三个括号”[0-9-]+”中的正则表达式

White Space Tokenizer

这个Tokenizer将文本的空格当做分隔符。

参数 说明
rule 默认java 如何定义空格
unicode

例如:

<analyzer><tokenizer class="solr.WhitespaceTokenizerFactory" rule="java" />
</analyzer>

输入: “To be, or what?”
输出: “To”, “be,”, “or”, “what?”

Solr Tokenizers分词器介绍相关推荐

  1. 【ES实战】ES分词器介绍

    文章目录 ES分词器介绍 什么是分词器 分词器的组成 Character filters Tokenizers Token filters 分词的过程 写入时分词 搜索时分词 测试分词效果 分词器的分 ...

  2. Elasticsearch之Analyzer分词器介绍

    Elasticsearch之Analyzer分词器介绍 Analysis Analyzer的组成 ES中内置的分词器 Analyzer的使用 几种分词器介绍 Standard Analyzer Sim ...

  3. “Elasticsearch + Kibana + ik分词器“介绍与使用

    Elasticsearch 介绍 Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例. 作为 Elastic Stack 的核心,它集中存 ...

  4. Elasticsearch:ICU 分词器介绍

    ICU Analysis 插件是一组将 Lucene ICU 模块集成到 Elasticsearch 中的库. 本质上,ICU 的目的是增加对 Unicode 和全球化的支持,以提供对亚洲语言更好的文 ...

  5. Solr - 中文分词器IK Analyzer的简介及配置

    简介 IK Analyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包.它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件,IK 实现了简单的分词 ...

  6. Elasticsearch分词器介绍

    ES自带分词器有哪些?有哪些特点? Standard Analyzer: 标准分词器,也是ES的默认分词器,按词切分,小写处理,默认停用词默认是关闭的. Simple Analyzer: 按照非字母切 ...

  7. solr 中文分词器IKAnalyzer和拼音分词器pinyin

    solr分词过程: Solr Admin中,选择Analysis,在FieldType中,选择text_en 左边框输入 "冬天到了天气冷了小明不想上学去了",点击右边的按钮,发现 ...

  8. IKAnalyzer 中文分词器

    IK Analyzer 2012 介绍 IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包.从 2006 年 12 月推出 1.0 版开始, IKAnalyzer ...

  9. 玩转ES,一文教你掌握IK中文分词器

    前言 ES默认的分词器对中文分词并不友好,所以我们一般会安装中文分词插件,以便能更好的支持中文分词检索. 而ES的中文分词器中,最流行的必然是IK分词器. 一.IK分词器介绍 IK分词器在是一款基于词 ...

最新文章

  1. 十一Python之路,Day6 - 面向对象学习
  2. 题目1181:遍历链表
  3. mysql 中模糊查询的四种用法介绍
  4. 别再管你的API叫微服务了
  5. GPU CUDA 经典入门指南
  6. 工作193:vue.runtime.esm.js?2b0e:619 [Vue warn]: <transition-group> children must be keyed: <ElTag>
  7. 10桌面管理文件收纳_二十余件精选桌面好物推荐,让学习工作生活满满正能量!...
  8. CC++运算符优先级
  9. mysql的几种模式_MYSQL复制的几种模式
  10. Python出入库简洁系统
  11. pivot unpivot_静态和动态SQL Pivot和Unpivot关系运算符概述
  12. 如何计算java对象占用的内存
  13. .condarc(conda 配置文件)、换国内源
  14. echo, print, printf 和 sprintf 区别(PHP)
  15. 经典SQL语句大全(转)
  16. 深入浅出 CAS,很多想进阿里的倒在了这个知识点
  17. RTN实时音视频传输网络
  18. UE4 WebBrowser插件版本
  19. 股票入门浅学20210721
  20. 移动应用的黑盒测试(1)

热门文章

  1. python绘图设置时间坐标轴_Matplotlib绘图双纵坐标轴设置及控制设置时间格式
  2. 关于Ubuntu多显卡服务器,掉显卡的问题
  3. STM32F4-usb_slave u盘
  4. [CF850E]Random Elections
  5. 捣鼓PlantUML
  6. xxl-job源码解读:调度器schedule
  7. android官方夜间模式,Android实现夜间模式的方法(一)
  8. js 移动端网页特效+移动端轮播图案例+移动端常用开发插件的使用
  9. 发qq邮件被对方服务器拒绝,QQ被对方拉黑了。我发QQ邮件对对方能收到吗?
  10. python将横转为竖_【后端开发】python数据竖着怎么变横的?