Elasticsearch.net v. 2.3+ 库 (c#) 中多字段映射的替代方案?
Alternative for multifield mapping in Elasticsearch.net v. 2.3+ library (c#)?
我的问题:
我有一个包含字符串 属性 的索引,我在该索引上执行查询和聚合。我想执行术语查询,其中 属性 被分析,而术语聚合 属性 未被分析。在以前的 elasticsearch 版本中,有一个多字段映射,但是自该库的 2.0 版本以来它就消失了。我怎样才能做到这一点?
旁注:
我想避免在我的索引中复制 属性 并将重复项中的一个标记为已分析,另一个标记为未分析,因为它似乎不是有效的解决方案。
我使用的库 (c#): Elasticsearch.net 2.3.3 和 NEST 2.3.3.
欢迎提出任何建议。
multi_field
映射仍然存在于 Elasticsearch 2.x 和 NEST 2.x 中;这是一个例子
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"))
)
)
);
我的问题: 我有一个包含字符串 属性 的索引,我在该索引上执行查询和聚合。我想执行术语查询,其中 属性 被分析,而术语聚合 属性 未被分析。在以前的 elasticsearch 版本中,有一个多字段映射,但是自该库的 2.0 版本以来它就消失了。我怎样才能做到这一点?
旁注: 我想避免在我的索引中复制 属性 并将重复项中的一个标记为已分析,另一个标记为未分析,因为它似乎不是有效的解决方案。
我使用的库 (c#): Elasticsearch.net 2.3.3 和 NEST 2.3.3.
欢迎提出任何建议。
multi_field
映射仍然存在于 Elasticsearch 2.x 和 NEST 2.x 中;这是一个例子
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"))
)
)
);