Solr Filter过滤器介绍_solr 过滤器-程序员宅基地

技术标签: filter  过滤器  Solr  solr  

摘要: Solr的过滤器对接收到的标记流(TokenStream )做额外的处理。参见原文

Solr的Analyzer分析器、Tokenizer分词器、Filter过滤器的区别/联系

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

常见的Solr Filter过滤器

ASCII Folding Filter

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

例子:

<analyzer>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
</analyzer>

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

Classic Filter

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

例子:

<analyzer>
  <tokenizer class="solr.ClassicTokenizerFactory"/>
  <filter class="solr.ClassicFilterFactory"/>
</analyzer>

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

Common Grams Filter

这个Filter结合通用tokens来处理常用词。

参数 说明
words 以.txt结尾的文件 提供常用词库
format 可选,例如”snowball” 指定常用词列表的格式
ignoreCase 布尔值,默认false 是否忽略常用词大小写

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true"/>
</analyzer>

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

Edge N-Gram Filter

将输入文本转化成指定范围大小的片段。

参数 说明
minGramSize 整数,默认1 指定最小的片段大小
maxGramSize 整数,默认1 指定最大的片段大小

例如:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.EdgeNGramFilterFactory"/>
</analyzer>

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

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="4"/>
</analyzer>

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

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.EdgeNGramFilterFactory" 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 class="solr.StandardTokenizerFactory "/>
  <filter class="solr.EnglishMinimalStemFilterFactory"/>
</analyzer>

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

Keep Word Filter

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

参数 说明
words 必填,以.txt结尾的文件 提供保留词列表
ignoreCase 布尔值,默认false 是否忽略保留词列表大小写
enablePositionIncrements 布尔值 Solr5.0以后废弃

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
</analyzer>

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

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.KeepWordFilterFactory" words="keepwords.txt" ignoreCase="true"/>
</analyzer>

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

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
  <filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
</analyzer>

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

Length Filter

这个Filter处理在给定范围长度的tokens。

参数 说明
min 整数,必填 指定最小的token长度
max 整数,必填,需大于min 指定最大的token长度
enablePositionIncrements 布尔值 从Solr5.0以后废弃

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LengthFilterFactory" min="3" max="7"/>
</analyzer>

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

Lower Case Filter

这个Filter将所有的大写字母转化为小写。
没有参数。

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.LowerCaseFilterFactory"/>
</analyzer>

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

N-Gram Filter

将输入文本转化成指定范围大小的片段。

参数 说明
minGramSize 整数,默认1 指定最小的片段大小
maxGramSize 整数,默认2 指定最大的片段大小

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.NGramFilterFactory"/>
</analyzer>

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

例子2:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="4"/>
</analyzer>

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

例子3:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="5"/>
</analyzer>

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

Pattern Replace Filter

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

参数 说明
pattern 必填,正则表达式 需要匹配的正则表达式
replacement 必填,字符串 需要替换的部分
replace “all” 或 “first”, 默认”all” 全部替换还是,只替换第一个

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.PatternReplaceFilterFactory" pattern="cat" replacement="dog"/>
</analyzer>

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

例子2:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.PatternReplaceFilterFactory" pattern="cat" replacement="dog" replace="first"/>
</analyzer>

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

例子3:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.PatternReplaceFilterFactory" 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)中的内容。

参数 说明
words 可选,停词列表 指定停词列表的路径
format 可选,如”snowball” 停词列表的格式
ignoreCase 布尔值,默认false 是否忽略大小写
enablePositionIncrements 布尔值 Solr5.0以后废弃

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" 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 class="solr.StandardTokenizerFactory"/>
  <filter class="solr.StopFilterFactory" 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用来处理同义词。

参数 说明
synonyms 必选,以.txt结尾的文件 指定同义词列表
ignoreCase 布尔值,默认false 是否忽略大小写
expand 布尔值,默认true TRUE:同义词将扩大至所有等价的同义词;FALSE:所有等价的同义词将相当于列表中的第一个。
format 可选,默认solr 指定解析同义词的策略
tokenizerFactory 可选,默认WhitespaceTokenizerFactory 指定解析同义词列表使用的tokenizer factory
analyzer 可选,默认WhitespaceTokenizerFactory 指定使用的analyzer class

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

例子:

<analyzer>
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.SynonymFilterFactory" 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以每个单词为分隔符。

参数 说明 举例
generateWordParts 整数,默认1 不为0的时候正常分词 CamelCase -> “Camel”, “Case”
generateNumberParts 整数,默认1 不为0的时候可以分隔数字 “1947-32” ->”1947”, “32”
splitOnCaseChange 整数,默认1 为0时,不处理驼峰拼写形式 “BugBlaster-XL” -> “BugBlaster”,”XL”
splitOnNumerics 整数,默认1 为0时,不处理数字和单词组合的形式 “FemBot3000” -> “Fem”, “Bot3000”
catenateWords 整数,默认0 不为0时,会将分析后的单词连接在一起 “hot-spot-sensor’s” -> “hotspotsensor”
catenateNumbers 整数,默认0 不为0时,会将分析后的数字连接在一起 1947-32 -> “194732”
catenateAll 0或1,默认0 不为0时,会将分析后的单词、数字等连接在一起 “Zap-Master-9000” -> “ZapMaster9000”
preserveOriginal 整数,默认0 不为0时,将保留原始的token “Zap-Master-9000” -> “Zap-Master-9000”, “Zap”, “Master”, “9000”
protected 可选,路径名 某个文件的内容将不会分析
stemEnglishPossessive 整数,默认1 为1时,将除去's形式 “O’Reilly’s” -> “O”, “Reilly”

例子:

<analyzer>
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.WordDelimiterFilterFactory"/>
</analyzer>

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

例子2:

<analyzer>
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.WordDelimiterFilterFactory" 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 class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.WordDelimiterFilterFactory" 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 class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.WordDelimiterFilterFactory" catenateAll="1"/>
</analyzer>

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

例子5:

<analyzer>
  <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  <filter class="solr.WordDelimiterFilterFactory" 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”

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jiangchao858/article/details/54989025

智能推荐

使用nginx解决浏览器跨域问题_nginx不停的xhr-程序员宅基地

文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr

在 Oracle 中配置 extproc 以访问 ST_Geometry-程序员宅基地

文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc

Linux C++ gbk转为utf-8_linux c++ gbk->utf8-程序员宅基地

文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8

IMP-00009: 导出文件异常结束-程序员宅基地

文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束

python程序员需要深入掌握的技能_Python用数据说明程序员需要掌握的技能-程序员宅基地

文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求

Spring @Service生成bean名称的规则(当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致)_@service beanname-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname

随便推点

二叉树的各种创建方法_二叉树的建立-程序员宅基地

文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#include&lt;malloc.h&gt;#include&lt;iostream&gt;#include&lt;stack&gt;#include&lt;queue&gt;using namespace std;typed_二叉树的建立

解决asp.net导出excel时中文文件名乱码_asp.net utf8 导出中文字符乱码-程序员宅基地

文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码

笔记-编译原理-实验一-词法分析器设计_对pl/0作以下修改扩充。增加单词-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词

android adb shell 权限,android adb shell权限被拒绝-程序员宅基地

文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限

投影仪-相机标定_相机-投影仪标定-程序员宅基地

文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定

Wayland架构、渲染、硬件支持-程序员宅基地

文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland

推荐文章

热门文章

相关标签