使用 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>
我正在使用 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>