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

[经验分享] 【solr filter 介绍

[复制链接]

尚未签到

发表于 2017-12-19 17:44:20 | 显示全部楼层 |阅读模式
Solr的Analyzer分析器、Tokenizer分词器、Filter过滤器的区别/联系


  • Analyzer负责把文本字段转成token stream,然后自己处理、或调用Tokenzier和Filter进一步处理,Tokenizer和Filter是同等级和顺序执行的关系,一个处理完后交给下一个处理。
  • Tokenizer接收text(从solr那里获得一个Reader来读取文本),拆分成tokens,输出token stream
  • Filter接收token stream,对每个token进行处理(比如:替换、丢弃、不理),输出token stream。在配置文件中,Tokenizer放在第一位,Filter放在第二位直到最后一位。Filters是顺序执行的,前一个的结果是后一个是输入,所以,一般通用的处理放在前面,特殊的处理靠后
常见的Solr Filter过滤器

ASCII Folding Filter
  这个Filter将不属于ASCII(127个字符,包括英文字母,数字,常见符号)的字符转化成与ASCII 字符等价的字符。
  没有参数。
  例子:
  

<analyzer>  <filter/>
  
</analyzer>
  

  输入: “á”
  输出:“a”

Classic Filter
  这个Filter接受Classic Tokenizer的结果,并处理首字母缩略词和所有格形式(英文中含有 ‘s 的形式)
  例子:
  

<analyzer>  <tokenizer/>
  <filter/>
  
</analyzer>
  

  原始文本:“I.B.M. cat’s can’t”
  输入: “I.B.M”, “cat’s”, “can’t”
  输出:“IBM”, “cat”, “can’t

Common Grams Filter
  这个Filter结合通用tokens来处理常用词。
DSC0000.png

  例子:
  

<analyzer>  <tokenizer/>
  <filter words="stopwords.txt" ignoreCase="true"/>
  
</analyzer>
  

  原始文本: “the Cat”
  输入: “the”, “Cat”
  输出: “the_cat”

Edge N-Gram Filter
  将输入文本转化成指定范围大小的片段。
DSC0001.png

  例如:
  

<analyzer>  <tokenizer/>
  <filter/>
  
</analyzer>
  

  原始文本: “four score and twenty”
  输入: “four”, “score”, “and”, “twenty”
  输出: “f”, “s”, “a”, “t”
  例子:
  

<analyzer>  <tokenizer/>
  <filter minGramSize="1" maxGramSize="4"/>
  
</analyzer>
  

  原始文本: “four score”
  输入: “four”, “score”
  输出: “f”, “fo”, “fou”, “four”, “s”, “sc”, “sco”, “scor”
  例子:
  

<analyzer>  <tokenizer/>
  <filter minGramSize="4" maxGramSize="6"/>
  
</analyzer>
  

  原始文本: “four score and twenty”
  输入: “four”, “score”, “and”, “twenty”
  输出: “four”, “scor”, “score”, “twen”, “twent”, “twenty”

English Minimal Stem Filter
  这个Filter将英语中的复数处理成单数形式。
  没有参数。
  例子:
  

<analyzer type="index">  <tokenizer/>
  <filter/>
  
</analyzer>
  

  原始文本: “dogs cats”
  输入: “dogs”, “cats”
  输出: “dog”, “cat”

Keep Word Filter
  这个Filter将不属于列表中的单词过滤掉。和Stop Words Filter的效果相反。
DSC0002.png

  例子:
  

<analyzer>  <tokenizer/>
  <filter words="keepwords.txt"/>
  
</analyzer>
  

  保留词列表keepwords.txt
  happy
  funny
  silly
  原始文本: “Happy, sad or funny”
  输入: “Happy”, “sad”, “or”, “funny”
  输出: “funny”
  例子:
  

<analyzer>  <tokenizer/>
  <filter words="keepwords.txt" ignoreCase="true"/>
  
</analyzer>
  

  保留词列表keepwords.txt
  happy
  funny
  silly
  原始文本: “Happy, sad or funny”
  输入: “Happy”, “sad”, “or”, “funny”
  输出: “Happy”, “funny”
  例子:
  

<analyzer>  <tokenizer/>
  <filter/>
  <filter words="keepwords.txt"/>
  
</analyzer>
  

  保留词列表keepwords.txt
  happy
  funny
  silly
  原始文本: “Happy, sad or funny”
  输入: “happy”, “sad”, “or”, “funny”
  输出: “Happy”, “funny”

Length Filter
  这个Filter处理在给定范围长度的tokens。
DSC0003.png

  例子:
  

<analyzer>  <tokenizer/>
  <filter min="3" max="7"/>
  
</analyzer>
  

  原始文本: “turn right at Albuquerque”
  输入: “turn”, “right”, “at”, “Albuquerque”
  输出: “turn”, “right”

Lower Case Filter
  这个Filter将所有的大写字母转化为小写。
  没有参数。
  例子:
  

<analyzer>  <tokenizer/>
  <filter/>
  
</analyzer>
  

  原始文本: “Down With CamelCase”
  输入: “Down”, “With”, “CamelCase”
  输出: “down”, “with”, “camelcase”

N-Gram Filter
  将输入文本转化成指定范围大小的片段。
DSC0004.png

  例子:
  

<analyzer>  <tokenizer/>
  <filter/>
  
</analyzer>
  

  原始文本: “four score”
  输入: “four”, “score”
  输出: “f”, “o”, “u”, “r”, “fo”, “ou”, “ur”, “s”, “c”, “o”, “r”, “e”, “sc”, “co”, “or”, “re”
  例子2:
  

<analyzer>  <tokenizer/>
  <filter minGramSize="1" maxGramSize="4"/>
  
</analyzer>
  

  原始文本: “four score”
  输入: “four”, “score”
  输出: “f”, “fo”, “fou”, “four”, “s”, “sc”, “sco”, “scor”
  例子3:
  

<analyzer>  <tokenizer/>
  <filter minGramSize="3" maxGramSize="5"/>
  
</analyzer>
  

  原始文本: “four score”
  输入: “four”, “score”
  输出: “fou”, “four”, “our”, “sco”, “scor”, “score”, “cor”, “core”, “ore”

Pattern Replace Filter
  这个Filter可以使用正则表达式来替换token的一部分内容,与正则表达式想匹配的被替换,不匹配的不变。
DSC0005.png

  例子:
  

<analyzer>  <tokenizer/>
  <filter pattern="cat" replacement="dog"/>
  
</analyzer>
  

  原始文本: “cat concatenate catycat”
  输入: “cat”, “concatenate”, “catycat”
  输出: “dog”, “condogenate”, “dogydog”
  例子2:
  

<analyzer>  <tokenizer/>
  <filter pattern="cat" replacement="dog" replace="first"/>
  
</analyzer>
  

  原始文本: “cat concatenate catycat”
  输入: “cat”, “concatenate”, “catycat”
  输出: “dog”, “condogenate”, “dogycat”
  例子3:
  

<analyzer>  <tokenizer/>
  <filter pattern="(\D+)(\d+)$" replacement="$1_$2"/>
  
</analyzer>
  

  原始文本: “cat foo1234 9987 blah1234foo”
  输入: “cat”, “foo1234”, “9987”, “blah1234foo”
  输出: “cat”, “foo_1234”, “9987”, “blah1234foo”

Standard Filter
  这个Filter将首字母缩略词中的点号(如I.B.M处理为IBM)去除,将英文中的所有格形式中的's除去(如stationer’s处理为stationer)。
  没有参数。
  在Solr3.1以后已经废弃。

Stop Filter
  这个Filter会在解析时忽略给定的停词列表(stopwords.txt)中的内容。
DSC0006.png

  例子:
  

<analyzer>  <tokenizer/>
  <filter words="stopwords.txt"/>
  
</analyzer>
  

  保留词列表stopwords.txt
  be
  or
  to
  原始文本: “To be or what?”
  输入: “To”(1), “be”(2), “or”(3), “what”(4)
  输出: “To”(1), “what”(4)
  例子2:
  

<analyzer>  <tokenizer/>
  <filter words="stopwords.txt" ignoreCase="true"/>
  
</analyzer>
  

  保留词列表stopwords.txt
  be
  or
  to
  原始文本: “To be or what?”
  输入: “To”(1), “be”(2), “or”(3), “what”(4)
  输出: “what”(4)

Synonym Filter
  这个Filter用来处理同义词。
DSC0007.png

  注意,常用的同义词列表格式:
  1. 以#开头的行为注释内容,忽略
  2. 以,分隔的文本,为双向同义词,左右内容等价,互为同义词
  3. 以=>分隔的文本,为单向同义词,匹配到左边内容,将替换为右边内容,反之不成立
  例子:
  

<analyzer>  <tokenizer/>
  <filter synonyms="mysynonyms.txt"/>
  
</analyzer>
  

  同义词列表synonyms.txt
  couch,sofa,divan
  teh => the
  huge,ginormous,humungous => large
  small => tiny,teeny,weeny
  原始文本: “teh small couch”
  输入: “teh”(1), “small”(2), “couch”(3)
  输出: “the”(1), “tiny”(2), “teeny”(2), “weeny”(2), “couch”(3), “sofa”(3), “divan”(3)
  原始文本: “teh ginormous, humungous sofa”
  输入: “teh”(1), “ginormous”(2), “humungous”(3), “sofa”(4)
  输出: “the”(1), “large”(2), “large”(3), “couch”(4), “sofa”(4), “divan”(4)

Word Delimiter Filter
  这个Filter以每个单词为分隔符。
DSC0008.png

  例子:
  

<analyzer>  <tokenizer/>
  <filter/>
  
</analyzer>
  

  原始文本: “hot-spot RoboBlaster/9000 100XL”
  输入: “hot-spot”, “RoboBlaster/9000”, “100XL”
  输出: “hot”, “spot”, “Robo”, “Blaster”, “9000”, “100”, “XL”
  例子2:
  

<analyzer>  <tokenizer/>
  <filter generateNumberParts="0" splitOnCaseChange="0"/>
  
</analyzer>
  

  原始文本: “hot-spot RoboBlaster/9000 100-42”
  输入: “hot-spot”, “RoboBlaster/9000”, “100-42”
  输出: “hot”, “spot”, “RoboBlaster”, “9000”,”100”,”42”
  例子3:
  

<analyzer>  <tokenizer/>
  <filter catenateWords="1" catenateNumbers="1"/>
  
</analyzer>
  

  原始文本: “hot-spot 100+42 XL40”
  输入: “hot-spot”(1), “100+42”(2), “XL40”(3)
  输出: “hot”(1), “spot”(2), “hotspot”(2), “100”(3), “42”(4), “10042”(4), “XL”(5), “40”(6)
  例子4:
  

<analyzer>  <tokenizer/>
  <filter catenateAll="1"/>
  
</analyzer>
  

  原始文本: “XL-4000/ES”
  输入: “XL-4000/ES”(1)
  输出: “XL”(1), “4000”(2), “ES”(3), “XL4000ES”(3)
  例子5:
  

<analyzer>  <tokenizer/>
  <filter protected="protwords.txt"/>
  
</analyzer>
  

  受保护词列表protwords.txt
  AstroBlaster
  XL-5000
  原始文本: “FooBar AstroBlaster XL-5000 ==ES-34-”
  输入: “FooBar”, “AstroBlaster”, “XL-5000”, “==ES-34-”
  输出: “FooBar”, “AstroBlaster”, “XL-5000”, “ES”, “34”

运维网声明 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-425773-1-1.html 上篇帖子: Solr 6.7学习笔记(03) 下篇帖子: 说一说solr在tomcat,jetty上的运行和安装优缺点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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