Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - Analyzer, tokenizer(4)
有些时候,我们需要自定义 fieldType。下面的例子就是自定义的 fieldType,<analyzer type="index"> 表示索引时怎么处理,<analyzer type="query">表示查询时怎么处理。
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- 本例中,我们只在查询时应用同义词
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
tokenizer: 对输入流进行分词。这里的“solr.” 代表:org.apache.solr.analysis. 这个包
filter: 对tokenizer输出的每一个分词,进行处理。
Tokenizer
1. solr.StandardTokenizerFactory
把文本用空格和标点符号分割。对于小数点(.),如果后面不是空格的话,将会被保留。如网址。连字符(-)的两边会被分割成两个分词(token)。
参数:maxTokenLength 分词的最大长度,超出部分将被忽略。
example:
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory" maxTokenLength="100"/>
</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"
2. solr.ClassicTokenizerFactory
跟StardardTokenizerFactory差不多,不同点如下:
(1)连字符(-)两边如果有数字的话,将不会被拆分。
(2)能识别邮件地址
参数:maxTokenLength 分词的最大长度,超出部分将被忽略。
示例:
输入: Please email john.doe@foo.com by 03-09, re: m37-xq.
输出: "Please", "email", "john.doe@foo.com", "by", "03-09", "re", "m37-xq"
3. solr.KeywordTokenizerFactory
整个文本做为一个分词。
示例:
输入: Please email john.doe@foo.com by 03-09, re: m37-xq.
输出: “Please email john.doe@foo.com by 03-09, re: m37-xq"
4. solr.LetterTokenizerFactory
连续的字母做为一个分词。
示例:
输入: I can't.
输出: “I", "can", "t"
5. solr.LowerCaseTokenizerFactory
按非字母进行分词,并转化成小写。
示例:
输入: I LOVE my iPhone.
输出: “I", "love", "my", "iphone"
6. solr.NGramTokenizerFactory
对文本按照 n-Gram 进行分词。
参数:minGramSize (default 1) -- 必须 > 0
maxGramSize (default 2) -- 必须 >= minGramSize
示例:
输入: hey man
输出: “h", "e", "y", " ", “m", "a", "n", "he", “ey", "y ", " m", "ma", "an"
7. solr.EdgeNGramTokenizerFactory
对文本按照 n-Gram 进行分词。
参数:minGramSize (default 1) -- 必须 > 0
maxGramSize (default 1) -- 必须 >= minGramSize
side (default "front") -- "front" or "back"
示例:
输入: babaloo
输出(default): “b"
输出(minGramSize=2, maxGramSize=5):"ba", "bab", "baba", "babal"
8. solr.ICUTokenizerFactory
对多语言文本,基于其语言特性,进行恰当地分词。
参数:rulefile-- 此值的格式: 四个字母的语言代码+“:”+文件路径
<analyzer>
<tokenizer class="solr.ICUTokenizerFactory" rulefile="Latn:my.Latin.rule.rbbi,Cyrl:my.Cyrillic.rules.rbbi"/>
</analyzer>
注意:需要添加额外的jar包到Solr 的 classpath下。
9. solr.PathHierarchyTokenizerFactory
用replace指定的字符代替delimiter指定的字符,并进行分词
参数:delimiter (no default)
replace (no default)
示例:
<analyzer>
<tokenizer class="solr.PathHierarchyTokenizerFactory" delimiter="\" replace="/"/>
</analyzer>
输入: d:\usr\local\apache
输出: "d:", "d:/usr", "d:/usr/local", "d:/usr/local/apache"
10. solr.PatternTokenizerFactory
利用Java的正则表达式进行分词。
参数:pattern -- 必填
group -- 可选。默认 -1 。
-1 表示正则表达式作为分割符。0 表示符合正则表达式的才会被认为是一个分词而保留。大于0的值(比如2)表示只保留符合正则表达式的部分中的第2个部分。
示例:
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="\s*\s*" />
</analyzer>
输入: fee,fie, foe , fun, foo
输出: "fee", "fie", "foe", "fun", "foo"
示例:
<analyzer>
<tokenizer class="solr.PatternTokenizerFactory" pattern="[A-Z][A-Za-z]*" group="0"/>
</analyzer>
输入: Hello, My name is Rose.
输出: "Hello", "My", "Rose"
11. solr.UAX29URLEmailTokenizerFactory
空格和标点符号做为分割符。小数点如果后面不是空格,则被保留。连接符(“-”)连起来的各个部分将被划分为独立的分词,除非其中包含数字。网址、Email、IP地址将会被认为一个整体。
参数:maxTokenLength -- 长度超过此值的分词将会被截断。
12. solr.WhitespaceTokenizerFactory
仅将空格做为分割符。
参数:rule -- "java": 默认值,利用Character.isWhitespace(int)确定是否是whitespace。 “unicode”: 利用Unicode的whitespace做为分割符。
Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - Analyzer, tokenizer(4)的更多相关文章
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) -- 样例(6)
managed-schema 样例: <?xml version="1.0" encoding="UTF-8" ?> <!-- License ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml) - filter(5)
自定义fieldType时,通常还会用到filter.filter必须跟在tokenizer或其它filter之后.如: <fieldType> <analyzer> < ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(3)
5. <fieldType> fieldType主要定义了一些字段类型,其name属性值用于前面<field>中的type属性的值.e.g. <fieldTyp ...
- Solr 6.7学习笔记(04)-- Suggest
当我们使用baidu或者Google时,你输入很少的字符,就会自动跳出来一些建议选项,在Solr里,我们称之为Suggest,在solrconfig.xml里做一些简单的配置,即可实现这一功能.配置如 ...
- 软件测试之loadrunner学习笔记-02集合点
loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行 ...
- 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)
机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...
- OpenCV 学习笔记 02 使用opencv处理图像
1 不同色彩空间的转换 opencv 中有数百种关于不同色彩空间的转换方法,但常用的有三种色彩空间:灰度.BRG.HSV(Hue-Saturation-Value) 灰度 - 灰度色彩空间是通过去除彩 ...
- SaToken学习笔记-02
SaToken学习笔记-02 如果排版有问题,请点击:传送门 常用的登录有关的方法 - StpUtil.logout() 作用为:当前会话注销登录 调用此方法,其实做了哪些操作呢,我们来一起看一下源码 ...
- Redis:学习笔记-02
Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...
- Solr 6.7学习笔记(02)-- 配置文件 managed-schema (schema.xml)(1)
刚学Solr(版本6.7.0),新建一个core时,提示要求schema.xml文件,我找了半天也没在源码包中找到名为schema.xml的文件.这个版本其实用的是managed-schema文件,没 ...
随机推荐
- 《ASP.NET4从入门到精通》学习笔记2
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/dongdongdongJL/article/details/37610807 <ASP.N ...
- 用c++后缀自动机实现最大公共字符串算法,并封装成Python库
后缀自动机的C++代码转自https://e-maxx.ru/algo/suffix_automata,其余封装为自写. 在C++文件同级目录建立setup.py文件,代码如下: # !/usr/bi ...
- JS表自动取值赋值
/* * * V1.0.0 表单自动取值.赋值插件 * 表单类型:text radio select-one checkbox textarea * 注意项: * 1.表单必须设置name属性 * 调 ...
- B. Two Buttons
这是Codeforces Round #295 (Div. 2) 的B 题,题意为: 给出n, m, 有两种操作,n 减一 和 n 乘以 2,问最少要多少次操作才能把n 变成 m. Sample te ...
- 窥探 Swift 之别具一格的 Struct 和 Class
说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...
- 排序List集合
这两天写代码过程中遇到一个需求,需要按照某个字段排序List集合,自己实现了一半,发现网上有个更好的版本,就采用了这个,记录下来. 使用这个工具类要注意一个就是 如果你按照age 字段排序,那么age ...
- action和servlet共存(转)
转自:http://www.cnblogs.com/nayitian/archive/2013/03/04/2942537.html 问题 项目要求struts2和servlet能够共存,就是stru ...
- css实现下拉列表
像上面的要想实现 Hover 标题时 内容区下拉的效果,一般是要用js实现: 先获取内容区的高度,由于内容区刚开始可能是隐藏的,那么怎么才能获取其高度呢?方法是先给其元素设置绝对定位并把位置保持和之 ...
- BZOJ3648:寝室管理
浅谈树分治:https://www.cnblogs.com/AKMer/p/10014803.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem. ...
- python2和python3中的range区别
python2中的range返回的是一个列表 python3中的range返回的是一个迭代值 for i in range(1,10)在python2和python3中都可以使用,但是要生成1-10的 ...