您可以使用
fields属性(以前称为multi
field)将两个不同的分析器应用于同一分析器。
我的VB.NET有点生锈,所以希望您不要介意C#示例。如果您使用的是dev分支中的最新代码,那么
Fields它只是添加到每个核心映射描述符中,因此您现在可以执行以下操作:
client.Map<Foo>(m => m .Properties(props => props .String(s => s .Name(o => o.Bar) .Analyzer("keyword") .Fields(fs => fs .String(f => f .Name(o => o.Bar.Suffix("stemmed")) .Analyzer("snowball") ) ) ) ));否则,如果您使用的是NEST 1.0.2或更早版本(可能是),则必须通过较旧的
multi field类型方法来完成此操作:
client.Map<Foo>(m => m .Properties(props => props .MultiField(mf => mf .Name(o => o.Bar) .Fields(fs => fs .String(s => s .Name(o => o.Bar) .Analyzer("keyword")) .String(s => s .Name(o => o.Bar.Suffix("stemmed")) .Analyzer("snowball")) ) ) ));Elasticsearch支持这两种方式,它们的作用完全相同。将
keyword分析器应用于主
bar字段,然后将
snowball分析器应用于该
bar.stemmed字段。
stemmed当然,这只是我在这些示例中选择的后缀,您可以使用所需的任何后缀名称。实际上,您不需要添加后缀,您可以为多字段命名与主字段完全不同的名称。



