solr 分析器
源https://www.w3cschool.cn/solr_doc
Solr 分析器被指定为 schema.xml 配置文件中的<fieldType>元素的子元素(在与 solrconfig. xml 相同的 conf/ 目录中)。
在正常使用情况下,只有类型为 solr.TextField 的字段将指定一个分析器。配置分析器的最简单的方法是使用单个 <analyzer> 元素,它的类属性是一个完全限定的Java 类名。命名的类必须派生自 org.apache.lucene.analysis.Analyzer。例如:
<fieldType name="nametext" class="solr.TextField">
<analyzer class="org.apache.lucene.analysis.core.WhitespaceAnalyzer"/>
</fieldType>
在这种情况下,单个类 WhitespaceAnalyzer 负责分析指定文本字段的内容并发出相应的令牌。对于简单的情况,如简单的英文散文,这样的单个分析器类可能就足够了。但是通常需要对字段内容进行更复杂的分析。
即使是最复杂的分析要求,通常也可以分解为一系列离散的、相对简单的处理步骤。正如你很快就会发现的那样,Solr 发行版提供了大量的标记器和过滤器,覆盖了你可能遇到的大多数场景。建立一个分析器链非常简单,您可以指定一个简单的< analyzer >元素(无类属性),使用子元素命名标记器和过滤器的工厂类以使用,按照您希望它们运行的顺序。
例如:
<fieldType name="nametext" class="solr.TextField">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory"/>
<filter class="solr.EnglishPorterFilterFactory"/>
</analyzer>
</fieldType>
请注意,org.apache.solr.analysis 包中的类可能在这里用简写的 solr. 前缀来引用。
在这种情况下,<analyzer> 元素上没有指定分析器类。相反,一系列更专业化的类连接在一起,共同作为该字段的分析器。该字段的文本被传递给list(solr.StandardTokenizerFactory)中的第一个项目,而从最后一个(solr.EnglishPorterFilterFactory)中出现的标记是用于对任何使用 "nametext" fieldType 的字段进行索引或查询的术语。
字段值与索引术语:分析器的输出会影响给定字段中索引的术语 (以及分析对这些字段的查询时使用的术语),但不会影响字段的存储值。例如: “Brown Cow”分成两个索引词 “brown” 和 “cow”,但存储的值仍将是一个字符串: “Brown Cow”。
分析阶段
分析发生在两种情况下:在索引的时候,当一个字段被创建时,分析得到的令牌流将被添加到一个索引中,并为该字段定义一组术语(包括位置、大小等)。在查询时间,分析正在搜索的值,并将结果的条件与存储在字段索引中的条件进行匹配。
在很多情况下,对两个阶段都应该进行相同的分析。例如,当您想要查询精确的字符串匹配时,这可能是不区分大小写的。在其他情况下,您可能希望在索引期间应用略有不同的分析步骤,而不是在查询时使用的分析步骤。
如果您为 <analyzer> 字段类型提供了一个简单的定义(如上例所示),那么它将用于索引和查询。如果您想要为每个阶段使用不同的分析器,则可以包含两个与 type 属性区分的 <analyzer> 定义。例如:
<fieldType name="nametext" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="syns.txt"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
在这个理论性的例子中,在索引时,文本被标记化,标记被设置为小写,任何未列出的 keepwords.txt 都被丢弃,而保留的那些将被映射到文件 syns.txt 中的同义词规则所定义的替代值。这基本上是从一组受限制的可能值生成索引,然后将它们规范化为可能甚至不会出现在原始文本中的值。
在查询时,唯一发生的规范化是将查询条件转换为小写。在索引时发生的筛选和映射步骤不适用于查询条件。在这个例子中,查询必须非常精确,仅使用在索引时存储的规范化术语
分析多期扩展
在某些类型的查询中(即:前缀、通配符、正则表达式等等),用户提供的输入不是用于分析的自然语言。诸如同义词或停用词过滤之类的东西在这些类型的查询中不起作用。
则可以明确定义一个要使用的 multiterm 分析器,如下例所示:
<fieldType name="nametext" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.KeepWordFilterFactory" words="keepwords.txt"/>
<filter class="solr.SynonymFilterFactory" synonyms="syns.txt"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<!-- No analysis at all when doing queries that involved Multi-Term expansion -->
<analyzer type="multiterm">
<tokenizer class="solr.KeywordTokenizerFactory" />
</analyzer>
</fieldType>
solr 分析器的更多相关文章
- solr中的schema.xml(managed-schema)文件解读
solr 7.2.1版本managed-schema文件示例 <uniqueKey>id</uniqueKey> 唯一键字段,solr对每一个文档都赋予一个唯一标识符字段,避免 ...
- solr创建业务域以及指定中文分析器IK
第一步:把中文分析器添加到工程中. 1.把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下 2.把扩展词典.配置文件放到solr工程的WEB-INF/classes目录下 ...
- solr学习之域的管理与中文分析器配置
该文使用 Centos6.5 64 位 solr4.10.3 IK-Analyzer中文分析器 一.solr域 在solr中域的概念与lucene中域的概念相同,数据库的一条记录或者一个文 ...
- solr学习之六--------Analyzer(分析器)、Tokenizer(分词器)
首先,不知道大家在前面的例子中没有试着搜索文本串,就是在第二节,我们添加了很多文档.如果字段值是一个文本.你如果只搜索这个字段的某个单词,是不是发现搜不到? 这就是因为我们没有配置Analyzer,因 ...
- Solr中的概念:分析器(analyzer)、字符过滤器(character filter)、分词器(Tokenizer)、词元过滤器(Token Filter)、 词干化(Stemming)
文本中包含许多文本处理步骤,比如:分词,大写转小写,词干化,同义词转化和许多的文本处理. 文本分析既用于索引时对一文本域的处理,也用于查询时查询字符串的文本处理.文本处理对搜索引擎的搜索结果有着重要的 ...
- solr介绍一:Analyzer(分析器)、Tokenizer(分词器)
首先,不知道大家在前面的例子中没有试着搜索文本串,就是在第二节,我们添加了很多文档.如果字段值是一个文本.你如果只搜索这个字段的某个单词,是不是发现搜不到? 这就是因为我们没有配置Analyzer,因 ...
- Centos7系统环境下Solr之Java实战(二)制定中文分析器、配置业务域
制定中文分析器 1.把IKAnalyzer2012FF_u1.jar添加到solr工程的lib目录下 2.把扩展词典.配置文件放到solr工程的WEB-INF/classes目录下. 配置一个Fiel ...
- solr 配置中文分析器/定义业务域/配置DataImport功能(测试用)
一.配置中文分析器 使用IKAnalyzer 配置方法: 1)把IK的jar包添加到solr工程中/WEB-INF/lib目录下 2)把IK的配置文件扩展词典, ...
- solr增加中文分析器
我的solr版本是5.3.0 1将jar包ik-analyzer-solr5-5.x.jar放入sor的web-inf的lib里面 2 在web-inf下面新建classes目录,再新增三个配置文件: ...
随机推荐
- php in_array 的 坑
话不多说,直接上代码 $str = '7.php'; var_dump(in_array($str,range(0,100))); die; 是 true 这是因为 php是弱类型语言,会把7.php ...
- 「开源」目前见过的最好的开源OA产品
这是我目前见过的最好的开源OA产品.功能完整,代码结构清晰.值得推荐. 1.项目介绍 oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,mysql ...
- 数论/暴力 Codeforces Round #305 (Div. 2) C. Mike and Frog
题目传送门 /* 数论/暴力:找出第一次到a1,a2的次数,再找到完整周期p1,p2,然后以2*m为范围 t1,t2为各自起点开始“赛跑”,谁落后谁加一个周期,等到t1 == t2结束 详细解释:ht ...
- MySQL FailOver(官方自带,free)
为什么 传统复制和GTIDs切换的缺点 当replication故障出现之后,最头疼是replication架构的调整 一旦master down了,就需要配置某一台slave作为master sla ...
- Camera和 tris,verts的优化
Unity的Camera组件有很多可调节的参数,当需要做优化的时候,stats面板中的tris和verts这两个重点项都与Camera组件的参数有很大关系,有些参数的意义Unity手册说得不够详细,经 ...
- PL/SQL笔记(1)-流程控制,循环,异常,块
流程控制 1.If,then,else,elsif(不是elseif) ' then null; endif; 2.Case 简单case表达式: 搜索型Case表达式: 3.goto语句 begin ...
- 【转】一个Java对象到底占多大内存?
最近在读<深入理解Java虚拟机>,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存? 在网上搜到了一篇博客讲的非常好 ...
- VS2015调用低版本lib库出现“无法解析的外部符号 __snprintf ”问题的解决
VS2015在调用低版本lib库出现有时会出现“无法解析的外部符号 __snprintf ”的问题,解决方法是加入lib库“legacy_stdio_definitions.lib”到工程.
- JDBC ResultSet分析
JDBC1.0 .JDBC2.0 .JDBC3.0 中分别用以下方法创建Statement . JDBC1.0 : createStatement() JDBC2.0 : createStatemen ...
- 项目中非常有用并且常见的ES6语法
今天闲着无事,梳理下ES6常见的语法知识点:除此之外的知识点自行细化和梳理! <!DOCTYPE html> <html> <head> <meta char ...