什么是分析器(Analyzer)

一个分析器可以检查字段的文本信息,并且产生一个 token 流。分析器是 schema.xml 中的 <fieldType> 元素的一个子元素,schema.xml 可以在 solr/conf 目录下找到或者跟 solrconfig.xml 在同一目录。
通常使用中,只有 solr.TextField 类型的字段会专门制定一个分析器。最简单配置一个分析器的方式是使用 <analyzer> 元素,制定这个元素的 class 属性为一个完整的 Java 类名。这些类名必须源自 org.apache.lucene.analysis.Analyzer 。以下是个例子:
<br />
&lt;fieldType name=&quot;nametext&quot; class=&quot;solr.TextField&quot;&gt;<br />
&lt;analyzer class=&quot;org.apache.lucene.analysis.WhitespaceAnalyzer&quot;/&gt;<br />
&lt;/fieldType&gt;<br />

在这个例子中,WhitespaceAnalyzer 这个类负责分析文本字段的内容并且产生出正确的 tokens。举个简单例子,简明英文散文,像这样的一个分析器的类足可以应付了。但是经常需要对字段内容做复杂的分析。
复杂的分析,需要分析成多个独立的简单步骤进行处理。比较直截了当的方式是设置分析器的链。指定一个简单的 <analyzer> 元素(不是类属性),该元素带有用做分析器和过滤器的工厂类。示例:
<br />
&lt;fieldType name=&quot;nametext&quot; class=&quot;solr.TextField&quot;&gt;<br />
&lt;analyzer&gt;<br />
&lt;tokenizer class=&quot;solr.StandardTokenizerFactory&quot;/&gt;<br />
&lt;filter class=&quot;solr.StandardFilterFactory&quot;/&gt;<br />
&lt;filter class=&quot;solr.LowerCaseFilterFactory&quot;/&gt;<br />
&lt;filter class=&quot;solr.StopFilterFactory&quot;/&gt;<br />
&lt;filter class=&quot;solr.EnglishPorterFilterFactory&quot;/&gt;<br />
&lt;/analyzer&gt;<br />
&lt;/fieldType&gt;<br />

需要说明的话solr.前缀的包,其实是指向 org.apache.solr.analysis 这个包。
在这个例子中,在 <analyzer> 元素没有指定分析器的类,而是一系列的类共同承担一个字段的分析器。字段的文本首先传到列表的第一个元素(solr.StandardTokenizerFactory),然后在最后一个元素(solr.EnglishPorterFilterFactory)产生出 tokens,这些 tokens 作为 terms 在字段的索引和查询时使用。

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress   闽ICP备18020075号-1