【问题标题】:Alternative for multifield mapping in Elasticsearch.net v. 2.3+ library (c#)?Elasticsearch.net v. 2.3+ 库(c#)中多字段映射的替代方案?
【发布时间】:2016-07-28 12:54:10
【问题描述】:

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

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

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

欢迎提出任何建议。

【问题讨论】:

    标签: c# .net elasticsearch nest


    【解决方案1】:

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

    【讨论】:

    • 别担心,乐于助人:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2023-03-24
    • 2012-04-10
    相关资源
    最近更新 更多