是否可以将Solr字段配置为具有多个/拆分过滤器链?例如,我可以创建一个看起来像这样的过滤器链吗?:
StandardTokenizer
↓
LowerCaseFilter
↙ ↘
SynonymnFilter PhoneticFilter
↓
NGramFilter
我已经做了很多搜索,但没有找到任何以这种方式设置过滤器链的示例。
修改
我想在单个字段的上下文中执行此操作的主要原因(与使用复制字段将数据索引两次相反)是用于突出显示。如果我使用复制字段在同一数据上运行不同的过滤器链,我的突出显示结果将如下所示:
"highlighting":{
"1234": {
"firstName_phonetic":["<hl>John</hl>"],
"firstName_ngram":["<hl>John</hl>"]
}
}
这使得消费结果变得更加困难,因为消费应用需要选择要显示的突出显示字段。理想情况下,我会得到这样的回复:
"highlighting":{
"1234": {
"firstName":["<hl>John</hl>"]
}
}
答案 0 :(得分:1)
使用copyField和索引两个不同的字段听起来是合理的,每个字段都有自己的链。
但是,我想没有什么可以阻止你实现你自己的MyCustomFilter来做你需要的东西,然后把它插入你的conf。
答案 1 :(得分:1)
一个过滤器的输出转到链中的下一个过滤器。没有支持“分支”。
如果您想要自定义过滤器,您将实现此方法。
org.apache.lucene.analysis.TokenStream.incrementToken()
此方法返回一个布尔值。您可以看到示例here。
另一种可能的解决方案是使用copyField将firstName_phonetic和firstName_ngram组合成firstName并使用hl.fl = firstName