Solr 什么是分析器(Analyzer)

一个分析器可以检查字段的文本信息,并且产生一个 token 流。

分析器是 schema.xml 中的 元素的一个子元素,schema.xml 可以在 solr/conf 目录下找到或者跟 solrconfig.xml 在同一目录。

通常使用中,只有 solr.TextField 类型的字段会专门制定一个分析器。

最简单配置一个分析器的方式是使用 元素,制定这个元素的 class 属性为一个完整的 Java 类名。

这些类名必须源自 org.apache.lucene.analysis.Analyzer 。以下是个例子:[code]

[/code]在这个例子中,WhitespaceAnalyzer 这个类负责分析文本字段的内容并且产生出正确的 tokens。

举个简单例子,简明英文散文,像这样的一个分析器的类足可以应付了。

但是经常需要对字段内容做复杂的分析。

复杂的分析,需要分析成多个独立的简单步骤进行处理。

比较直截了当的方式是设置分析器的链。

指定一个简单的 元素(不是类属性),该元素带有用做分析器和过滤器的工厂类。示例:<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>需要说明的话solr.前缀的包,其实是指向 org.apache.solr.analysis 这个包。

在这个例子中,在 元素没有指定分析器的类,而是一系列的类共同承担一个字段的分析器。

字段的文本首先传到列表的第一个元素(solr.StandardTokenizerFactory),然后在最后一个元素(solr.EnglishPorterFilterFactory)产生出 tokens,这些 tokens 作为 terms 在字段的索引和查询时使用。