文本中包含许多文本处理步骤,比如:分词,大写转小写,词干化,同义词转化和许多的文本处理。
文本分析既用于索引时对一文本域的处理,也用于查询时查询字符串的文本处理。文本处理对搜索引擎的搜索结果有着重要的影响,特别是对如召回率的影响。
文本分析是将一个文本域的值转化为一个词序列。词是Lucene实际索引和搜索时的最小单元。分析作用于索引时原始的输入值,将转化后的词顺序保存到Lucene的索引结构中。文本分析也同样作用于查询时所输入的查询串中的查询词和查询短语,转化后的词将用于查询Lucene的索引。不用进行文本分析的查询是前缀查询,通配符查询和模糊查询。
看下面的配置:
1 <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 2 3 <analyzer type="index"> 4 5 <!--<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>--> 6 7 <tokenizer class="solr.WhitespaceTokenizerFactory"/> 8 9 <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true"/> 10 11 <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 12 13 <filter class="solr.LowerCaseFilterFactory"/> 14 15 <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 16 17 <filter class="solr.PorterStemFilterFactory"/> 18 19 </analyzer> 20 21 <analyzer type="query"> 22 23 <!--<charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/>--> 24 25 <tokenizer class="solr.WhitespaceTokenizerFactory"/> 26 27 <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 28 29 <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_en.txt" enablePositionIncrements="true" 30 31 /> 32 33 <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" 34 35 splitOnCaseChange="1"/> 36 37 <filter class="solr.LowerCaseFilterFactory"/> 38 39 <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 40 41 <filter class="solr.PorterStemFilterFactory"/> 42 43 </analyzer> 44 45 </fieldType>