Solr中的前后边缘图

Solr中的前后边缘图,solr,lucene,tokenize,n-gram,Solr,Lucene,Tokenize,N Gram,我想使用EdgeNGramFilterFactory从正面和背面生成Edge Ngram。前面我用的是 <filter class="solr.EdgeNGramFilterFactory" maxGramSize="20" minGramSize="4"/> <filter class="solr.ReverseStringFilterFactory"/> <filter class="solr.EdgeNGramFilterFactory" min

我想使用EdgeNGramFilterFactory从正面和背面生成Edge Ngram。前面我用的是

  <filter class="solr.EdgeNGramFilterFactory" maxGramSize="20" minGramSize="4"/>
  <filter class="solr.ReverseStringFilterFactory"/>
  <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15"/>
  <filter class="solr.ReverseStringFilterFactory"/>
更新2:包括样本输入和预期输出

输入字符串

华盛顿

所需边缘图


Was
Wash
Washi
Washington
ashington
shington
hington
gton
ton

如果您创建自定义版本的EdgeNGramFilterFactory(java,然后将其插入schema.xml),并从后面创建额外的NGRAM,则可以在单个分析器链中完成此操作

否则,您需要将copyField转换为具有单独链的附加字段


老实说,我觉得第一个选项太麻烦了,但这是肯定的。

你能举个例子吗?@SanjayDutt我在问题中添加了一个带有单独分析器的例子。谢谢,但我希望你为给定的输入举个例子,你想要的预期输出结果是什么。@SanjayDutt抱歉。我以为您希望在项目中使用一个示例:)
<fieldType name="text_suggest_edge" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="12"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="12"/>
  </analyzer>
</fieldType>

<fieldType name="text_suggest_edge_end" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ReverseStringFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="12"/>
    <filter class="solr.ReverseStringFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ReverseStringFilterFactory"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="12"/>
    <filter class="solr.ReverseStringFilterFactory"/>
  </analyzer>
</fieldType>

<field name="item_name_edge" type="text_suggest_edge" indexed="true" stored="false" multiValued="true"/>
<field name="item_name_edge_end" type="text_suggest_edge_end" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_name" dest="item_name_edge"/>
<copyField source="item_name" dest="item_name_edge_end"/>