Elasticsearch.net v.2.3 +库(c#)中多字段映射的替代方案?

时间:2016-07-27 20:11:34

标签: c# .net elasticsearch nest

我的问题: 我有一个带有字符串属性的索引,我在其上执行查询和聚合。我想对正在分析的属性执行术语查询,并且不对该属性的术语聚合进行分析。在以前的elasticsearch版本中,有一个多字段映射,但自从该库的2.0版本以来它已经消失了。我怎样才能做到这一点?

旁注: 我想避免在我的索引中复制该属性,并将其中一个重复标记为已分析,另一个未分析,因为它看起来不像是有效的解决方案。

我使用的库(c#): Elasticsearch.net 2.3.3和NEST 2.3.3。

欢迎任何建议。

1 个答案:

答案 0 :(得分:3)

Elasticsearch 2.x和NEST 2.x中仍然存在

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"))
        )
    )
);