使用 Solr EdgeNgramFileterFactory 进行部分搜索

partial search using Solr EdgeNgramFileterFactory

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

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

所以如果这个词是 "sfx" 这将不会存储在索引中,因为它的长度 < 4 并且我无法搜索它,有什么方法可以存储索引中长度 < minGramSize 的单词并使其可搜索 ???

使用 Solr 4.3 谢谢...

您必须将 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>