Solr Tokenizers分词器介绍
摘要: 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分词器介绍相关推荐
- 【ES实战】ES分词器介绍
文章目录 ES分词器介绍 什么是分词器 分词器的组成 Character filters Tokenizers Token filters 分词的过程 写入时分词 搜索时分词 测试分词效果 分词器的分 ...
- Elasticsearch之Analyzer分词器介绍
Elasticsearch之Analyzer分词器介绍 Analysis Analyzer的组成 ES中内置的分词器 Analyzer的使用 几种分词器介绍 Standard Analyzer Sim ...
- “Elasticsearch + Kibana + ik分词器“介绍与使用
Elasticsearch 介绍 Elasticsearch 是一个分布式.RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例. 作为 Elastic Stack 的核心,它集中存 ...
- Elasticsearch:ICU 分词器介绍
ICU Analysis 插件是一组将 Lucene ICU 模块集成到 Elasticsearch 中的库. 本质上,ICU 的目的是增加对 Unicode 和全球化的支持,以提供对亚洲语言更好的文 ...
- Solr - 中文分词器IK Analyzer的简介及配置
简介 IK Analyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包.它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件,IK 实现了简单的分词 ...
- Elasticsearch分词器介绍
ES自带分词器有哪些?有哪些特点? Standard Analyzer: 标准分词器,也是ES的默认分词器,按词切分,小写处理,默认停用词默认是关闭的. Simple Analyzer: 按照非字母切 ...
- solr 中文分词器IKAnalyzer和拼音分词器pinyin
solr分词过程: Solr Admin中,选择Analysis,在FieldType中,选择text_en 左边框输入 "冬天到了天气冷了小明不想上学去了",点击右边的按钮,发现 ...
- IKAnalyzer 中文分词器
IK Analyzer 2012 介绍 IK Analyzer 是一个开源的,基亍 java 语言开发的轻量级的中文分词工具包.从 2006 年 12 月推出 1.0 版开始, IKAnalyzer ...
- 玩转ES,一文教你掌握IK中文分词器
前言 ES默认的分词器对中文分词并不友好,所以我们一般会安装中文分词插件,以便能更好的支持中文分词检索. 而ES的中文分词器中,最流行的必然是IK分词器. 一.IK分词器介绍 IK分词器在是一款基于词 ...
最新文章
- 十一Python之路,Day6 - 面向对象学习
- 题目1181:遍历链表
- mysql 中模糊查询的四种用法介绍
- 别再管你的API叫微服务了
- GPU CUDA 经典入门指南
- 工作193:vue.runtime.esm.js?2b0e:619 [Vue warn]: <transition-group> children must be keyed: <ElTag>
- 10桌面管理文件收纳_二十余件精选桌面好物推荐,让学习工作生活满满正能量!...
- CC++运算符优先级
- mysql的几种模式_MYSQL复制的几种模式
- Python出入库简洁系统
- pivot unpivot_静态和动态SQL Pivot和Unpivot关系运算符概述
- 如何计算java对象占用的内存
- .condarc(conda 配置文件)、换国内源
- echo, print, printf 和 sprintf 区别(PHP)
- 经典SQL语句大全(转)
- 深入浅出 CAS,很多想进阿里的倒在了这个知识点
- RTN实时音视频传输网络
- UE4 WebBrowser插件版本
- 股票入门浅学20210721
- 移动应用的黑盒测试(1)
热门文章
- python绘图设置时间坐标轴_Matplotlib绘图双纵坐标轴设置及控制设置时间格式
- 关于Ubuntu多显卡服务器,掉显卡的问题
- STM32F4-usb_slave u盘
- [CF850E]Random Elections
- 捣鼓PlantUML
- xxl-job源码解读:调度器schedule
- android官方夜间模式,Android实现夜间模式的方法(一)
- js 移动端网页特效+移动端轮播图案例+移动端常用开发插件的使用
- 发qq邮件被对方服务器拒绝,QQ被对方拉黑了。我发QQ邮件对对方能收到吗?
- python将横转为竖_【后端开发】python数据竖着怎么变横的?