Filter 有没有办法将solr文本标记器与n-edge-gram过滤器一起使用

Filter 有没有办法将solr文本标记器与n-edge-gram过滤器一起使用,filter,solr,Filter,Solr,我正在制作solr autosuggest功能。基本上,我打算从文本字符串中建议所有可能的标记组合。 让我们以搜索字符串为例: 找到火星和木星之间的所有路线 假设有多个solr文档以文本mars和jupiter开头,如mars1,mars2,jupiter8。 我想得到solr的建议,比如 找到mars1和jupiter8之间的所有路线 找到mars2和木星8之间的所有路线 它还应该搜索部分键入的术语。因此,下面的搜索查询也应该可以工作 找到火星和朱皮之间的所有路线 搜索建议: 找到mars1和

我正在制作solr autosuggest功能。基本上,我打算从文本字符串中建议所有可能的标记组合。 让我们以搜索字符串为例: 找到火星和木星之间的所有路线

假设有多个solr文档以文本marsjupiter开头,如mars1mars2jupiter8。 我想得到solr的建议,比如

找到mars1和jupiter8之间的所有路线

找到mars2和木星8之间的所有路线

它还应该搜索部分键入的术语。因此,下面的搜索查询也应该可以工作

找到火星和朱皮之间的所有路线

搜索建议:

找到mars1和jupiter8之间的所有路线

找到mars2和木星8之间的所有路线

在这个用例中,我需要用相关实体标记我的搜索字符串。我正在使用solrTextTagger

我的analyzer链如下所示

    <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过滤器?