设为首页 收藏本站
查看: 1010|回复: 0

[经验分享] 利用SOLR搭建企业搜索平台之十三 (solr分词器、过滤器、分析器)

[复制链接]

尚未签到

发表于 2015-7-17 09:05:38 | 显示全部楼层 |阅读模式
昨天晚上详细的说了说lucene的分析器,分词器,过滤器。今天我们来说说solr中的这三者吧。他是怎么基于lucene来写的。部分内容参见网上某文章
关于lucene的分析器,分词器,过滤器,请看:http://lianj-lee.javaeye.com/blog/501247
入正题:
    对一个document进行索引时,其中的每个field中的数据都会经历分析(根据上面的一个博客可以知道,分析就是组合分词和过滤),最终将一句话分成单个的单词,去掉句子当中的空白符号,大写转换小写,复数转单数,去掉多余的词,进行同义词代换等等。
  如:This is a blog! this, is, a 会被去除,最后最剩下blog。当然!这个符号也会被去除的。
  这个过程是在索引和查询过程中都会进行的,而且通常两者进行的处理的都是一样的,这样做是为了保证建立的索引和查询的正确匹配。
分析器(Analyzer)
  分析器是包括两个部分:分词器和过滤器。分词器功能将句子分成单个的词元token,过滤器就是对词元进行过滤。
  solr自带了一些分词器,如果你需要使用自定义的分词器,那么就需要修改schema.xml文件。
  schema.xml 文件允许两种方式修改文本被分析的方式,通常只有field类型为 solr.TextField 的field的内容允许定制分析器。
    方法一:使用任何 org.apache.lucene.analysis.Analyzer的子类进行设定。



Xml代码 http://lianj-lee.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf?clipboard=%3CfieldType%20name%3D%22text%22%20class%3D%22solr.TextField%22%3E%20%20%0A%20%20%20%20%20%20%3Canalyzer%20class%3D%22org.wltea.analyzer.lucene.IKAnalyzer%22%2F%3E%20%20%0A%3C%2FfieldType%3E%20

  •    
  •          
  •    
              
    方法二:指定一个TokenizerFactory ,后面跟一系列的TokenFilterFactories(它们将按照所列的顺序发生作用),Factories被用来创建分词器和分词过滤器,它们用 于对分词器和分词过滤器的准备配置,这样做的目的是为了避免the overhead of creation via reflection。



Xml代码 http://lianj-lee.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf?clipboard=%3Canalyzer%20type%3D%22index%22%3E%20%20%0A%20%20%20%20%20%20%20%20%3Ctokenizer%20class%3D%22org.wltea.analyzer.solr.IKTokenizerFactory%22%20isMaxWordLength%3D%22false%22%2F%3E%20%20%0A%E2%80%A6%E2%80%A6%20%20%0A%20%20%0A%20%20%20%20%3C%2Fanalyzer%3E%20%20%0A%20%20%20%20%3Canalyzer%20type%3D%22query%22%3E%20%20%0A%20%20%20%20%20%20%20%20%3Ctokenizer%20class%3D%22org.wltea.analyzer.solr.IKTokenizerFactory%22%20isMaxWordLength%3D%22true%22%2F%3E%20%20%0A%20%20%20%20%E2%80%A6%E2%80%A6%20%20%0A%20%20%20%20%3C%2Fanalyzer%3E%20

  •    
  •             
  • ……

  •         
  •         
  •             
  •     ……
  •       
              ……                                   ……         
  需要说明的一点是,Any Analyzer, TokenizerFactory, or TokenFilterFactory 应该用带包名的全类名进行指定,请确保它们位于Solr的classpath 路径下。对于 org.apache.solr.analysis.* 包下的类,仅仅通过solr.*就可以进行指定。
   如果你需要使用自己的分词器和过滤器,你就需要自己写一个 factory ,它必须是 BaseTokenizerFactory(分词器) 或BaseTokenFilterFactory(过滤器)的子类。就像下面一样。



Java代码 http://lianj-lee.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf?clipboard=public%20class%20MyFilterFactory%20extends%20BaseTokenFilterFactory%20%7B%0A%20%20public%20TokenStream%20create(TokenStream%20input)%20%7B%0A%20%20%20%20return%20new%20MyFilter(input)%3B%0A%20%20%7D%0A%7D%0A

  • public class MyFilterFactory extends BaseTokenFilterFactory {  
  •   public TokenStream create(TokenStream input) {  
  •     return new MyFilter(input);  
  •   }
  • }
public class MyFilterFactory extends BaseTokenFilterFactory {   public TokenStream create(TokenStream input) {     return new MyFilter(input);   } }  
对于IK3.1.5版本已经完全支持了solr的分词,这样就不用自己来编写了,而对于中文的切词的话,ik对solr的支持已经很完美了。
Solr提供了哪些TokenizerFactories?
1.  solr.LetterTokenizerFactory
   创建org.apache.lucene.analysis.LetterTokenizer.
   分词举例:
   "I can't" ==> "I", "can", "t",字母切词。
2.  solr.WhitespaceTokenizerFactory
   创建org.apache.lucene.analysis.WhitespaceTokenizer,主要是切除所有空白字符。
3.  solr.LowerCaseTokenizerFactory
   创建org.apache.lucene.analysis.LowerCaseTokenizer
   分词举例:
  "I can't" ==> "i", "can", "t",主要是大写转小写。
4.  solr.StandardTokenizerFactory
   创建org.apache.lucene.analysis.standard.StandardTokenizer
   分词举例:  "I.B.M. cat's can't" ==>  
ACRONYM: "I.B.M.", APOSTROPHE:"cat's", APOSTROPHE:"can't"
   说明:该分词器,会自动地给每个分词添加type,以便接下来的对type敏感的过滤器进行处理,目前仅仅只有StandardFilter对Token的类型是敏感的。
关键字: 搜索引擎 solr 分词
5.  solr.HTMLStripWhitespaceTokenizerFactory
从结果中出去HTML标签,将结果交给WhitespaceTokenizer处理。
例子:
my link
my link
hello
hello
hello
hello
if a

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-87473-1-1.html 上篇帖子: Solr Cloud搭建 下篇帖子: Solr高亮的配置参数说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表