单个Solr字段的多个/分割过滤器链

时间:2017-05-29 12:13:54

标签: solr search-engine

是否可以将Solr字段配置为具有多个/拆分过滤器链?例如,我可以创建一个看起来像这样的过滤器链吗?:

        StandardTokenizer
                ↓
         LowerCaseFilter
          ↙           ↘
  SynonymnFilter   PhoneticFilter    
        ↓
   NGramFilter

我已经做了很多搜索,但没有找到任何以这种方式设置过滤器链的示例。

修改

我想在单个字段的上下文中执行此操作的主要原因(与使用复制字段将数据索引两次相反)是用于突出显示。如果我使用复制字段在同一数据上运行不同的过滤器链,我的突出显示结果将如下所示:

"highlighting":{
  "1234": {
    "firstName_phonetic":["<hl>John</hl>"],
    "firstName_ngram":["<hl>John</hl>"]
  }
}

这使得消费结果变得更加困难,因为消费应用需要选择要显示的突出显示字段。理想情况下,我会得到这样的回复:

"highlighting":{
  "1234": {
    "firstName":["<hl>John</hl>"]
  }
} 

2 个答案:

答案 0 :(得分:1)

使用copyField和索引两个不同的字段听起来是合理的,每个字段都有自己的链。

但是,我想没有什么可以阻止你实现你自己的MyCustomFilter来做你需要的东西,然后把它插入你的conf。

答案 1 :(得分:1)

一个过滤器的输出转到链中的下一个过滤器。没有支持“分支”。

如果您想要自定义过滤器,您将实现此方法。

org.apache.lucene.analysis.TokenStream.incrementToken()

此方法返回一个布尔值。您可以看到示例here

另一种可能的解决方案是使用copyField将firstName_phonetic和firstName_ngram组合成firstName并使用hl.fl = firstName