solr中的 Analyzers, Tokenizers,和 Token Filters详解
当一个文档索引了以后, 其个别 field 的分析 analyzing 和标过滤器 tokenizing filters ,可以变换和规范中的数据域。例如:去除空格,去除 html 标签,去除注释, 删除一个特定的字符和取代它与另一个字符, 在索引的时候以及在查询时,您可能需要做一些上述或类似的操作。例如:你可能会执行一个 soundex 变换(一种语音散列)对一个字符串使搜索基于词和其上的声音一样 ” 。
下面的列表提供了一个概述的一些更为频繁使用的分析器和 tokenfilters , solr 提供了利用他们的实例,本表绝对不应该认为是所有分析类可以在 solr 的 “ 完整 ” 的名单! 除了新的类的基础上不断增加,你可以加载自己的自定义分析代码作为一个插件。详细请见【 solr 插件 .doc 】。
分析仪 Analyzers ,每个字段的类型,都在 solr 的 schema.xml 中配置。
更多的 Tokenizers 和 TokenFilters 请参考 luence 的官方 APIdoc ,或者 solr 的 api 文档。查看 analyzer-*. 下面的类,
对于一些特定语言的分析器和 tokenfilters Solr 可用信息,请查看 languageanalysis 。见文档【 solr 语言分析器 .doc 】。
高层次的概念
Stemming
有不同类型的所产生的策略。这有一种方式, Lucene/Solr 都使用 stemming 通过减少得到支持,因此必须应用在索引和查询的一面:
<!--[if !supportLists]-->1、 <!--[endif]-->Porter 是一个转化算法,减少了英语语言中的任何一个字,如 “walks , walking , walked 的形式 ” ,其元素根如, “walk” 。 Porter 是基于规则的和不需要一本字典。
<!--[if !supportLists]-->2、 <!--[endif]-->kstem ,为英语语言的一个不太积极的替代 Porter
<!--[if !supportLists]-->3、 <!--[endif]-->而 Snowball 提供几种语言,包括两个实现的 Porter 波特算法。 Snowball 雪球是一小串处理语言设计用于创建词干提取算法。。
<!--[if !supportLists]-->4、 <!--[endif]-->Hunspell 提供 stemming 所有语言, OpenOffice 的拼写检查词典。在基于词典的,它需要高质量和良好的字典来阻止 - 在这种情况下,它可以提供更精确的 stemming 比 Snowball 雪球算法很好地工作。
一个相关的技术所产生的是词干提取,这使得 “ 堵塞 ” 的扩张,以一个词根和扩张它的各种形式。 词干提取可以在插入时或查询时间。 Lucene/Solr 没有 lemmatization 的内置支持,但它可以通过你自己的字典和 synonymfilterfactory 模拟
请参加有关所产生的各种语言的细节 languageanalysis 。 见文档【 solr 语言分析器 .doc 】。
一个重复的问题是 “ 我怎样才能有原始项贡献 stemmed version 比更多的得分 ” ?在 solr4.3 中, keywordrepeatfilterfactory 已添加了这个功能。 此过滤器发出的每个输入令牌的两个标记,其中之一是标注关键字属性。词干分析器,尊重关键字属性将通过令牌无变化。所以这个滤镜的效果将是指数字和 stemmed 的版本。 4 所有上面列出的所有方面的关键字属性。
如果 term 不想被 stemming 改变, 这将导致在相同的令牌重复的文件,。 这可以通过增加 removeduplicatestokenfilterfactory 缓解。
<fieldType name="text_keyword" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.KeywordRepeatFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
Analyzers
分析仪的组件,在 index 时间 add/or 在搜索时间前处理输入文本。重要的是使用相同或类似的分析,处理文本以兼容的方式在索引和查询时间。例如:如果一个索引分析仪相同的话,那么查询分析器也应使查找索引相同。
在通配符和模糊搜索,没有对搜索词进行文本分析。
大多数用户定义自定义 Solr 分析仪的文本字段类型,由零个或多个字符过滤工厂,一个定制的工厂,和零个或多个令牌过滤工厂;但它也可以配置一个字段类型使用一个具体的分析器的实现
Solr 的 Web 管理界面可以用来显示文本分析的结果,即使结果分析各阶段后,
Char Filters
char 滤器是预处理过程的输入字符的一部分(消费和生产字符流),可以添加,更改或删除字符,同时保留字符位置信息。
Char Filters 可以链接。
Tokenizers
Tokenizer 将一个字符流(从每个字段值)分割为为一系列的标记。
每一个 Analyzer 只能使用一个 tokenizers 。
Token Filters
用 Tokens 产生的令牌是通过一系列的令牌的过滤器,添加,更改或删除标记。字段是通过令牌流索引。
指定架构中的一个分析器
Solr SCHEMA.XML 文件允许两种方法指定一个文本字段分析方式。
1、指定一个分析器类的名称可以是任何 org.apache.lucene.analysis.analyzer延伸具有一个默认构造函数,或一个单一的参数的构造函数,以一个 Lucene的 “版本 ”的对象
的例子:
<fieldtype name="nametext" class="solr.TextField">
<analyzer class="org.apache.lucene.analysis.WhitespaceAnalyzer"/>
</fieldtype>
2、指定一个 tokenizerfactory然后列出可选 tokenfilterfactories所采用的排列顺序。工厂可以创建分析器或令牌的过滤器是用来准备配置为记号化器或过滤器和避免创造的开销,通过反射。
的例子:
<fieldtype name="text" class="solr.TextField">
<analyzer>
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldtype>
任何分析仪, charfilterfactory , tokenizerfactory ,或 tokenfilterfactory 可能使用其完整的类名和包指定。当您启动应用服务器,只要确保他们在 Solr 的 classpath ,。
如果你想使用自定义 charfilters , Tokenizers 或 tokenfilters ,你需要写一个非常简单的工厂,子类 basetokenizerfactory 或 basetokenfilterfactory ,像这样的东西 …
public class MyCustomFilterFactory extends BaseTokenFilterFactory {
public TokenStream create(TokenStream input) {
return new MyCustomFilter(input);
}
}
当使用一个 charfilter vs tokenfilter
有 charfilters 和 tokenfilters 具有相关的几对( IE : mappingcharfilter 和 asciifoldingfilter )或几乎相同的功能( IE : patternreplacecharfilterfactory 和 patternreplacefilterfactory ),它并不总是很明显这是最好的选择。
最终的决定在很大程度上取决于所使用的标记,以及你是否需要 “out smart” 的字符流的预处理。
例如,也许你有一个标记如 standardtokenizer 你很高兴它是如何工作的整体,但你想自定义一些特定字符的行为。
在这种情况下,你可以修改规则和重新使用 JavaCC 构建自己的标记,但也许它更容易只是地图上的一些人物在 charfilter 标记。
http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#Analyzers
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com