使用Solr EdgeNgramFileterFactory进行部分搜索

时间:2015-08-29 07:37:34

标签: search solr

我正在使用EdgeNgramFilterFactory进行部分搜索



<filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front"/>
&#13;
&#13;
&#13;

因此,如果单词&#34; sfx&#34; ,则不会将其存储在索引中,因为其长度为&lt; 4,我无法搜索它,有没有办法存储与lenghth&lt;在索引中使用minGramSize并使其可搜索???

使用Solr 4.3 谢谢......

1 个答案:

答案 0 :(得分:1)

你必须将minGramSize改为较低的长度,比如3你的情况。 或者你可以将它保持为2。

在早期版本(我用过3.3)中有正面和背面,所以我就像这样使用它。

<fieldType name="text_reference" class="solr.TextField" sortMissingLast="true" omitNorms="true" positionIncrementGap="100">
    <analyzer type="index">
      <tokenizer class="solr.KeywordTokenizerFactory"/>
      <filter class="solr.LowerCaseFilterFactory"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="50" side="front"/>
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="50" side="back"/>
    </analyzer>
    <analyzer type="query">
       <tokenizer class="solr.KeywordTokenizerFactory"/>
       <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
  </fieldType>

或者您可以使用其他字段类型索引文本,您可以在其中保留文本,而不会在该字段中进行ngraming和搜索。如果它们不是任何n-gram过滤器,那么长度为3的文本将被索引。

<fieldType name="text_delimeter" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
      <tokenizer class="solr.WhitespaceTokenizerFactory"/>
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" preserveOriginal="1" catenateAll="1" splitOnCaseChange="0"/>
     <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>