gpt4 book ai didi

.net - ElasticSearch-自动映射

转载 作者:行者123 更新时间:2023-12-03 00:55:43 26 4
gpt4 key购买 nike

所以最近我开始研究ES,并考虑将当前的ElasticSearch.Net和Nest版本从1.x升级到5.x。我注意到一些变化。

我的问题是有关最新版本的自动映射功能。之前我有每个属性的属性。
例如说:

[ElasticProperty(Name = "age", Type = FieldType.Integer)]
public int Age { get; set; }

但是在新版本中,我可以做类似
[Number(NumberType.Integer, Name = "age")]
public int Age { get; set; }

我想知道该属性是否实际上是必需的,因为我在文档中读到在v5.x中我们具有自动映射功能。这会自动将ES中的所有字段映射到.Net中的属性吗?

以及我们何时真正需要映射?是仅在创建新类型时才需要,还是在从ES中获取数据时需要,还是两者都需要?

我希望我的问题有道理。

最佳答案

本质上有four ways to map C# POCO properties to fields of a document within Elasticsearch:

  • Using Automap to infer POCO属性类型
  • 中的Elasticsearch字段类型
  • Using Attributes 以显式控制属性类型如何映射到字段类型
  • Using fluent mapping 以控制属性类型如何映射到字段类型
  • Applying mapping conventions through implementing a visitor

  • 这四种方式可以组合使用,以提供映射方式的灵活性。使用 Properties()进行流利的映射将优先于所有其他映射。

    When would you use attributes over inferred mapping?



    当您要映射的映射略有不同时。举个例子
    [Number(NumberType.Integer, Name = "age")]
    public int Age { get; set; }

    在这里,属性映射所应用的映射与推断的完全相同,因此在这种情况下将是多余的。相反,假设我们不希望将值强制转换为数字,不希望忽略格式错误的值,也不想在o​​jit_code字段中包含值;我们可以通过属性映射来实现
    [Number(NumberType.Integer, Name = "age", Coerce = false, IgnoreMalformed = true, IncludeInAll = false)]
    public int Age { get; set; }

    When would you use fluent mapping over attributes?



    当您不想使用属性进行映射时,或者希望以无法通过属性映射表达的方式来映射POCO时,例如 multi_fields

    And when do we actually need the mapping? Is it only while creating a new type or is it required while fetching the data from ES or both?



    您需要先将索引添加到索引中,然后才能将第一个文档建立索引。如果您在索引第一个文档之前未添加映射,则默认情况下,Elasticsearch将使用其自己的推论从其看到的第一个文档推论该模式。

    您可以在创建索引时或在创建索引之后但在索引第一个文档之前添加映射。前者通常是最常见的。

    关于.net - ElasticSearch-自动映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44601950/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com