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

[经验分享] solr中的Analyzers, Tokenizers,和Token Filters详解

[复制链接]

尚未签到

发表于 2016-12-16 09:03:13 | 显示全部楼层 |阅读模式

solr中的Analyzers, Tokenizers,Token Filters详解


 
当一个文档索引了以后,其个别field的分析analyzing 和标过滤器tokenizing filters,可以变换和规范中的数据域。例如:去除空格,去除html标签,去除注释,删除一个特定的字符和取代它与另一个字符,在索引的时候以及在查询时,您可能需要做一些上述或类似的操作。例如:你可能会执行一个soundex变换(一种语音散列)对一个字符串使搜索基于词和其上的声音一样
 
下面的列表提供了一个概述的一些更为频繁使用的分析器和tokenfilterssolr提供了利用他们的实例,本表绝对不应该认为是所有分析类可以在solr完整的名单!除了新的类的基础上不断增加,你可以加载自己的自定义分析代码作为一个插件。详细请见【solr插件.doc】。
 
分析仪Analyzers,每个字段的类型,都在solrschema.xml中配置。
 
更多的Tokenizers TokenFilters 请参考luence的官方APIdoc,或者solrapi文档。查看 analyzer-*.下面的类,
 
对于一些特定语言的分析器和tokenfilters Solr可用信息,请查看languageanalysis。见文档【solr语言分析器.doc】。
 
 

高层次的概念

Stemming

有不同类型的所产生的策略。这有一种方式,Lucene/Solr都使用stemming通过减少得到支持,因此必须应用在索引和查询的一面:
<!--[if !supportLists]-->1、  <!--[endif]-->Porter是一个转化算法,减少了英语语言中的任何一个字,如“walkswalkingwalked的形式,其元素根如,“walk” Porter是基于规则的和不需要一本字典。
<!--[if !supportLists]-->2、  <!--[endif]-->kstem,为英语语言的一个不太积极的替代Porter
<!--[if !supportLists]-->3、  <!--[endif]-->Snowball提供几种语言,包括两个实现的Porter波特算法。Snowball雪球是一小串处理语言设计用于创建词干提取算法。。
<!--[if !supportLists]-->4、  <!--[endif]-->Hunspell提供stemming所有语言,OpenOffice的拼写检查词典。在基于词典的,它需要高质量和良好的字典来阻止-在这种情况下,它可以提供更精确的stemmingSnowball雪球算法很好地工作。
 
一个相关的技术所产生的是词干提取,这使得堵塞的扩张,以一个词根和扩张它的各种形式。词干提取可以在插入时或查询时间。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分析仪的文本字段类型,由零个或多个字符过滤工厂,一个定制的工厂,和零个或多个令牌过滤工厂;但它也可以配置一个字段类型使用一个具体的分析器的实现
 
SolrWeb管理界面可以用来显示文本分析的结果,即使结果分析各阶段后,
 

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>


任何分析仪,charfilterfactorytokenizerfactory,或tokenfilterfactory可能使用其完整的类名和包指定。当您启动应用服务器,只要确保他们在Solrclasspath,。
如果你想使用自定义charfiltersTokenizers tokenfilters,你需要写一个非常简单的工厂,子类basetokenizerfactorybasetokenfilterfactory,像这样的东西

public class MyCustomFilterFactory extends BaseTokenFilterFactory {
  public TokenStream create(TokenStream input) {
    return new MyCustomFilter(input);
  }
}


 


当使用一个charfilter vs tokenfilter


charfilterstokenfilters具有相关的几对(IEmappingcharfilterasciifoldingfilter)或几乎相同的功能(IEpatternreplacecharfilterfactorypatternreplacefilterfactory),它并不总是很明显这是最好的选择。
最终的决定在很大程度上取决于所使用的标记,以及你是否需要“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

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-314958-1-1.html 上篇帖子: Solr索引库l配置文件schema.xm要点翻译 下篇帖子: solr整合paoding分词注意的一些细节
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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