我有一种情况需要使用EdgeNGramFilterFactory和NGramFilterFactory.
我正在使用NGramFilterFactory执行"包含"样式搜索,最小字符数为2.我还想搜索第一个字母,例如带有前EdgeNGramFilterFactory的"startswith".
我不想将NGramFilterFactory降低到最小字符数1,因为我不想索引所有字符.
一些帮助将不胜感激
干杯
您不必在同一领域中完成所有这些操作.我会为每个处理使用不同的自定义类型创建不同的字段,以便您可以单独应用逻辑.
在下面的:
text 包含原始令牌,最低限度处理; text_ngram 使用NGramFilter作为你的双字符最小标记text_first_letter 使用EdgeNGram作为单字符的首字母标记如果您text以这种方式处理所有字段,那么您可以使用a copyField来填充字段.否则,您可以指示Solr客户端为三个单独的字段类型发送相同的字段值.
搜索时,请使用qf参数在搜索中包含所有这些内容.
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/>
</analyzer>
</fieldType>
<fieldType name="text_first_letter" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="1" side="front"/>
</analyzer>
</fieldType>
Run Code Online (Sandbox Code Playgroud)
设置field和dynamicField定义由您决定.或者如果您有更多问题,请告诉我,我可以通过澄清进行编辑.
| 归档时间: |
|
| 查看次数: |
4485 次 |
| 最近记录: |