我的问题: 我有一个带有字符串属性的索引,我在其上执行查询和聚合。我想对正在分析的属性执行术语查询,并且不对该属性的术语聚合进行分析。在以前的elasticsearch版本中,有一个多字段映射,但自从该库的2.0版本以来它已经消失了。我怎样才能做到这一点?
旁注: 我想避免在我的索引中复制该属性,并将其中一个重复标记为已分析,另一个未分析,因为它看起来不像是有效的解决方案。
我使用的库(c#): Elasticsearch.net 2.3.3和NEST 2.3.3。
欢迎任何建议。
答案 0 :(得分:3)
multi_field
映射;这是一个例子
client.Map<Document>(m => m
.Index("index-name")
.AutoMap()
.Properties(p => p
.String(s => s
.Name(n => n.Location)
.Fields(f => f
.String(fs => fs
.Name("raw").NotAnalyzed()
)
)
)
)
);
此处Location
属性被映射为multi_field
,并且应用了默认的Standard
分析器;这将在索引中的location
字段内。此外,已对location.raw
字段编制索引,但未对其进行分析。
使用分析的location
属性执行术语查询将是
client.Search<Document>(s => s
.Query(q => q
.Term(f => f.Location, "location")
)
);
在术语聚合中使用未分析的属性
client.Search<Document>(s => s
.Size(0)
.Aggregations(a => a
.Terms("top_locations", ta => ta
.Field(f => f.Location.Suffix("raw"))
)
)
);