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
相关推荐
此外,“Understanding Analyzers, Tokenizers, and Filters”章节深入解释了Solr是如何准备文本进行索引和搜索的。分析器(Analyzers)解析文本并生成用于索引和搜索的标记流;分词器(Tokenizers)将字段数据分解...
在Solr 5.x和6.x版本中,中文分词器扮演着至关重要的角色,它负责将中文文本拆分成有意义的词汇,便于索引和查询。下面将详细介绍Solr中的中文分词器及其相关知识。 一、Solr中文分词器概述 在处理中文文档时,由于...
在Solr中,分词器(Tokenizer)是分析器(Analyzer)的一部分,负责将输入的文本拆分成可被索引的基本单元——词(Token)。中文分词器的引入解决了英文分词相对简单,而中文以字为基本单位,需要特殊处理才能正确...
由于名称中包含了"solr5",这可能意味着该版本最初是为Solr 5设计的,但通过更新和调整,现在已经可以兼容到Solr 7.5。 2. `ext.dic`: 这是一个扩展词典文件,用于添加自定义词汇或者行业特定词汇。用户可以根据...
标题和描述提到的是针对Solr 5.5和Solr 6.0版本的IK分词器支持的相关资料,这意味着这些资源可能包括配置文件、文档、示例代码或者更新日志,帮助用户在这些特定版本的Solr中集成和优化IK分词器。 首先,让我们来看...
“Understanding Analyzers, Tokenizers, and Filters”是文档中介绍文本分析组件的章节。文本分析是搜索中的关键步骤,包括如何将文本分割成可索引的词元(tokens),以及如何对这些词元进行进一步的处理。这部分...
“Understanding Analyzers, Tokenizers, and Filters”部分解释了Solr如何为索引和搜索准备文本。分析器用于解析文本,并生成用于索引和搜索的标记流。分词器将字段数据分解成标记,而过滤器则对标记流进行其他转换...
### 分析器、分词器和过滤器的理解 (Understanding Analyzers, Tokenizers, and Filters) 文档的这一部分介绍了 Solr 如何准备文本以便进行索引和搜索。分析器是处理文本的组件,它将文本拆分为一系列标记(tokens...
进一步地,参考指南中解释了分析器(Analyzers)、分词器(Tokenizers)和过滤器(Filters)的工作原理。分析器是处理文本并为索引和搜索产生一个词元(tokens)流的过程,分词器则是将字段数据分解为词元。而过滤器...
Analyzer是Solr中处理文本的核心组件,负责将原始输入文本转换为一系列的关键词(Token),这些关键词可以被索引和搜索。ikanalyzer 对中文字符进行分词,确保了中文文本在索引和查询时的准确性和效率。 ikanalyzer...
深入到文本处理阶段,Solr使用分析器(Analyzers)、分词器(Tokenizers)和过滤器(Filters)来准备文本,以便于索引和搜索。分析器负责解析文本并生成令牌流,而分词器则将字段数据拆分为令牌。过滤器则对令牌流...
通过阅读“Solr使用详解.pdf”,你可以深入了解Solr的使用方法,掌握从安装配置到实际操作的全过程,从而更好地利用Solr解决实际的搜索和分析问题。同时,solrJ和IK分词器的使用将进一步提升你在Java环境中操作Solr...
在`solr-core.xml`或`solrconfig.xml`中,我们可以找到关于数据目录的配置,需要确保分词库能被正确地加载和使用。 具体步骤如下: 1. **下载分词库**:根据需求选择合适的中文分词库,如IK Analyzer,下载对应的...
在 Solr 6.0 中,IKAnalyzer 不仅可以继续为 Solr 5.x 提供服务,还增加了对新版本 Solr 的兼容性,确保了旧项目的平滑升级和新项目的稳定运行。 使用 IKAnalyzer 配置 Solr 6.0 或 5.x 的步骤大致如下: 1. **...
#### 十、理解分析器、分词器和过滤器(Understanding Analyzers, Tokenizers, and Filters) 1. **使用分析器、分词器和过滤器**:介绍了如何使用 Solr 的分析器、分词器和过滤器对文本进行预处理,以提高搜索效果...
### Solr中的MMSeg4J中文分词器安装与配置详解 #### 一、MMSeg4J简介 MMSeg4J是一款高效的Java实现的中文分词工具包,它基于统计和规则混合的方法来处理中文文本的分词问题。在搜索引擎如Solr中,通过集成MMSeg4J...
要在 Solr 中使用 IK Analyzer,首先需要将其添加到 Solr 的类路径中,然后在 Solr 的 schema.xml 或 managed-schema 文件中配置字段类型(fieldType),指定使用 IK Analyzer。同时,可以设置自定义词典路径,以...