solr5.5教程-Analyzer、Tokenizer、Filter
2016-07-01 10:05
148 查看
对于文本,solr在建立索引和搜索的时候需要对其做一定的处理(比如英文要去掉介词、转成小写、单词原形化等,中文要恰当地要分词)。这些工作,一般由Analyzers、Tokenizers、和Filter来实现。这三个东东配置在fieldType中。下面分别介绍一下
1、analyzer:告诉solr在建立索引和搜索的时候,如何处理text类型的内容,比如要不要去掉“a”、去掉介词、去掉复数,要不要全部变成小写等等……它在schema.xml文件中配置,可以直接指定一个类给它;也可以由tokenizer和filter的组合来实现。
此结点有几个参数:
type:可选参数,index或query,表名这个配置是在建立索引还是在搜索的时候使用
tokenizer:分词器,比如:StandardTokenizerFactory
filter:过滤器,比如:LowerCaseFilterFactory,小写转换
2、tokenizer:在analyzer结点内,指定analyzer的分词器。
3、filter:过滤器,比如:LowerCaseFilterFactory,小写转换
下面是一个配置的例子:
Tokenizer和Filter的区别:
Tokenizer:接收text(通过从solr那里获得一个reader来读取文本),拆分成tokens,输出token stream
Filter:接收token stream,对每个token进行处理(比如:替换、丢弃、不理),输出token stream
因此,在配置文件中,Tokenizer放在第一位,Filter放在第二位直到最后一位。
对于简单的英文文本,可以这样配置(使用空格分词器,不需要tokenizer和filter):
一般情况下,需要更多的处理,比如:
注:type="index"或"type="query" 这个参数如果没有,则表示两种都适用。
注:那些Factory并不是真正的tokenizer或filter,而是负责创建一个实现tokenizer接口的类。
注:由于filters是顺序执行的,前一个的结果是后一个是输入,所以,一般通用的处理放在前面,特殊的处理靠后
这些tokenizer和filter是顺序执行的,在建索引的情况下,最后一个filter EnglishPorterFilterFactory的输出,就会被用来建立索引。而原文本是不会变的,比如A Red Cow的索引是red, cow,但原文件还是保持Many Cows。
tokenizer和filter的配置还可以接收额外的参数:
1、analyzer:告诉solr在建立索引和搜索的时候,如何处理text类型的内容,比如要不要去掉“a”、去掉介词、去掉复数,要不要全部变成小写等等……它在schema.xml文件中配置,可以直接指定一个类给它;也可以由tokenizer和filter的组合来实现。
此结点有几个参数:
type:可选参数,index或query,表名这个配置是在建立索引还是在搜索的时候使用
tokenizer:分词器,比如:StandardTokenizerFactory
filter:过滤器,比如:LowerCaseFilterFactory,小写转换
2、tokenizer:在analyzer结点内,指定analyzer的分词器。
3、filter:过滤器,比如:LowerCaseFilterFactory,小写转换
下面是一个配置的例子:
<fieldType name="text_ik" class="solr.TextField"> <analyzer type="index" useSmart="false"> <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory"/> </analyzer> <analyzer type="query" useSmart="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>
Tokenizer和Filter的区别:
Tokenizer:接收text(通过从solr那里获得一个reader来读取文本),拆分成tokens,输出token stream
Filter:接收token stream,对每个token进行处理(比如:替换、丢弃、不理),输出token stream
因此,在配置文件中,Tokenizer放在第一位,Filter放在第二位直到最后一位。
对于简单的英文文本,可以这样配置(使用空格分词器,不需要tokenizer和filter):
<fieldType name="nametext" class="solr.TextField"> <analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer"/> </fieldType>
一般情况下,需要更多的处理,比如:
<fieldType name="nametext" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.StandardTokenizerFactory"/> <filter class="solr.StandardFilterFactory"/> <filter class="solr.LowerCaseFilterFactory"/> <filter class="solr.StopFilterFactory"/> <filter class="solr.EnglishPorterFilterFactory"/> </analyzer> </fieldType>
注:type="index"或"type="query" 这个参数如果没有,则表示两种都适用。
注:那些Factory并不是真正的tokenizer或filter,而是负责创建一个实现tokenizer接口的类。
注:由于filters是顺序执行的,前一个的结果是后一个是输入,所以,一般通用的处理放在前面,特殊的处理靠后
这些tokenizer和filter是顺序执行的,在建索引的情况下,最后一个filter EnglishPorterFilterFactory的输出,就会被用来建立索引。而原文本是不会变的,比如A Red Cow的索引是red, cow,但原文件还是保持Many Cows。
tokenizer和filter的配置还可以接收额外的参数:
<fieldType name="semicolonDelimited" class="solr.TextField"> <analyzer type="query"> <tokenizer class="solr.PatternTokenizerFactory" pattern="; "/> <filter class="solr.LengthFilterFactory" min="2" max="7"/> <analyzer> </fieldType>
相关文章推荐
- 五笔编码查询
- Android实现socket简单通信
- android dp和px的相互转换
- sublime快捷键归纳
- myeclipse6.5安装maven插
- 我的Android进阶之旅------>解决Android Studio报错:DefaultAndroidProject : Unsupported major.minor version 52.0
- AJAX
- Android---ScrollView滚动
- thinkphp初学者的安装与配置
- 应用MVP模式写出可维护的优美Android应用
- Android 中的MVP 模式
- Go to the first line OR the last line of the file
- 关于SASS
- VS2010 调试窗口一闪而过解决方法
- [置顶] Android开发之华为手机无法看log日志解决方法(亲测可用华为荣耀6)
- nginx介绍
- C语言编写的简单计算器程序
- Machine Schedule(poj 1274)
- [转]12篇学通C#网络编程——第二篇 HTTP应用编程(上)
- idea 15注册方法 破解方法 注册码