Filter 有没有办法将solr文本标记器与n-edge-gram过滤器一起使用
我正在制作solr autosuggest功能。基本上,我打算从文本字符串中建议所有可能的标记组合。 让我们以搜索字符串为例: 找到火星和木星之间的所有路线 假设有多个solr文档以文本mars和jupiter开头,如mars1,mars2,jupiter8。 我想得到solr的建议,比如 找到mars1和jupiter8之间的所有路线 找到mars2和木星8之间的所有路线 它还应该搜索部分键入的术语。因此,下面的搜索查询也应该可以工作 找到火星和朱皮之间的所有路线 搜索建议: 找到mars1和jupiter8之间的所有路线 找到mars2和木星8之间的所有路线 在这个用例中,我需要用相关实体标记我的搜索字符串。我正在使用solrTextTagger 我的analyzer链如下所示Filter 有没有办法将solr文本标记器与n-edge-gram过滤器一起使用,filter,solr,Filter,Solr,我正在制作solr autosuggest功能。基本上,我打算从文本字符串中建议所有可能的标记组合。 让我们以搜索字符串为例: 找到火星和木星之间的所有路线 假设有多个solr文档以文本mars和jupiter开头,如mars1,mars2,jupiter8。 我想得到solr的建议,比如 找到mars1和jupiter8之间的所有路线 找到mars2和木星8之间的所有路线 它还应该搜索部分键入的术语。因此,下面的搜索查询也应该可以工作 找到火星和朱皮之间的所有路线 搜索建议: 找到mars1和
<fieldType name="searchtag" class="solr.TextField" positionIncrementGap="100" postingsFormat="Memory"
omitTermFreqAndPositions="true" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PorterStemFilterFactory"/>
<filter class="org.opensextant.solrtexttagger.ConcatenateFilterFactory" />
<filter class="solr.EdgeNGramFilterFactory" maxGramSize="50" minGramSize="2"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
它适用于solr 5.3.1。但是在solr之后,默认情况下,solr 7.4solrTextTagger被添加到solr中。添加了solrtexttager后,我无法获得与上述相同的结果
我已经在solr 7.7.1中尝试过了
<fieldType name="searchtag" class="solr.TextField" postingsFormat="FST50" omitTermFreqAndPositions="true" omitNorms="true">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" expand="false"/>
<filter class="solr.EnglishPossessiveFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PorterStemFilterFactory"/>
<filter class="solr.FlattenGraphFilterFactory"/>
<filter class="solr.ConcatenateGraphFilterFactory" preserveSep="false" preservePositionIncrements="false"/>
<filter class="solr.EdgeNGramFilterFactory" maxGramSize="50" minGramSize="2"/>
</analyzer>
<analyzer type="query">
<charFilter class="solr.HTMLStripCharFilterFactory"/>
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory" />
<filter class="solr.ASCIIFoldingFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
上述措施不起作用。我在Solr Ref指南中找到了原因。声明如下
标记字段,必须是TextField
,在索引链(而不是查询链)的末尾具有ConcatenateGraphFilterFactory
:在该筛选器上设置preservePositionIncrements=false
。建议的字段设置:ommitnorms=true
,ommittermfrequeandpositions=true
和postingsFormat=FST50
我尝试了所有可能的solr过滤器的安排。无法获得与Solr5.3.1相同的结果,因此我只能使用Solr5.3.1
有没有一种方法可以使用solrTextTagger,在过滤链的底部使用edge n-gram过滤器?