2017-05-29 67 views
0

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

 StandardTokenizer 
       ↓ 
     LowerCaseFilter 
      ↙   ↘ 
    SynonymnFilter PhoneticFilter  
     ↓ 
    NGramFilter 

我已经做了相当多的搜索,并没有发现建立一个过滤链这样的任何例子。

EDIT

主要原因我想要这样做在单个字段中的上下文中(而不是索引数据两次使用一个副本field)是用于突出。如果我使用一个副本领域上运行同样的数据不同的过滤器链,我强调结果回来是这样的:

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

这使得消费的结果有点难度为消费应用需求来选择其中强调字段来显示。理想情况下,我会回到这样的东西:

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

回答

1

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

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

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

该方法返回一个布尔值。你可以看到一个例子here

另一种可能的解决方案是使用一个对copyField和firstName_phonetic为firstName_ngram响应合并成firstName和使用hl.fl =名字

1

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

但是,我想什么都不能阻止你实现你自己的MyCustomFilter来完成你所需要的,然后你将它插入你的conf。

+0

感谢。我想要做到这一点的主要原因是保持字段突出显示(我将这添加到我的问题)。我没有尝试过,但我假设如果一个查询只在复制字段匹配,原始字段不会有任何突出显示应用? –