博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Lucene的分析器理解
阅读量:4573 次
发布时间:2019-06-08

本文共 933 字,大约阅读时间需要 3 分钟。

 

 

Analyizer是用来分析文本的核心抽象类。它的返回是TokenStream,用来遍历所有的Token。该类的抽象核心方法是

TokenStream  tokenStream(String field,Reader reader){
    1.利用依赖的Tokenizer对象获得最初的TokenStream。
    2.利用TokenFilter层层过滤初始TokenStream并返回。
}
Lucene封装了几个Analyzer实现类。当然用户可以根据自己的应用程序去定制Analyzer。Lucene内置的几个现成的类中,最有用的是StantAnalyzer和StopAnalyzer。其它的几个象WhiteSpaceAnalyzer以及SimpleAnalyzer都是用来单元测试的。没有实际的使用价值。
自定义的场景比如自己根据应用提供了停用词集合。而不是默认的StopFilter包含的那些this, that,at等停用词。
TokenFilter的顺序还是比较重要的
1.顺序错误,影响的结果一个是Filter可能不起使用了。
LowerCaseToTokenizer=LowerCaseFilter+ LetterTokenizer , 前者效率更高,在分词的时候就做了小写转换。
StopFilter->LowerCaseFilter->LetterTokenizer  对于字符串" The day come" 过滤的结果是day come
而LowerCaseFilter->StopFilter->LetterTokenizer 的结果是the day come。注意到the变成了小写返回,并没有过滤,原因就是Filter的顺序打乱后,StopFilter由于是大小写敏感,所以无法过滤The导致。
2.顺序另一个影响是性能。
比如StopFilter+同义词写入与同义词写入+StopFilter的性能是完全不同的。先通过StopFilter做一些减法会让TokenStream的集合变小。更利于同义词写入。

转载于:https://www.cnblogs.com/highriver/archive/2011/11/22/2258464.html

你可能感兴趣的文章
最大子矩阵
查看>>
linux ssh scp sftp 生成密钥对
查看>>
MAC上parallels安装linux(转载)
查看>>
appium-环境搭建(一)
查看>>
穷爸爸富爸爸里面说的“现金流游戏”靠谱吗?
查看>>
luogu P1046 陶陶摘苹果
查看>>
BZOJ 3196: Tyvj 1730 二逼平衡树
查看>>
递归------python实现列表创建二叉树
查看>>
ios系统和某些移动端background-attachment:fixed不兼容性
查看>>
1003: 相邻数对问题
查看>>
【踩坑】List 的陷阱
查看>>
【开源】封装HTML5的localstorage
查看>>
通过ABAP代码判断当前系统类型,BYD还是S4 OP还是S4 Cloud
查看>>
买相机
查看>>
使用MDK将STM32的标准库编译成lib使用
查看>>
读《构建之法》1,2,3章后感
查看>>
luogu 1593 因子和
查看>>
将扁平化的JSON属性转换为嵌套的JSON
查看>>
[中英对照]Introduction to DPDK: Architecture and Principles | DPDK概论: 体系结构与实现原理...
查看>>
读黑客与画家啦
查看>>