【问题标题】:Set Routing in ElasticSearch using NEST and Attribute Mapping使用 NEST 和属性映射在 ElasticSearch 中设置路由
【发布时间】:2016-12-18 20:27:25
【问题描述】:

我正在尝试使用 Attribute based mapping 设置我的映射

我需要设置路由,使其成为必需并设置为我正在索引的对象上的特定属性。

这可能吗?有人做到了吗?

【问题讨论】:

    标签: elasticsearch nest elasticsearch-net


    【解决方案1】:

    首先,您需要在创建索引时进行所需的路由,如下所示:

    client.CreateIndex("my-index",
        d => d
            .Mappings(mapping => mapping
                .Map<MyObject>(map => map
                    .RoutingField(routing => routing
                        .Required(true))
                    .AutoMap()
                )
            ));
    

    其次,需要在索引文档时添加路由值,如下所示:

    var result = client.Index<MyObject>(
            myObject,
            selector => selector
                .Id(myObject.ObjectId)/*to avoid "random" ids*/
                .Routing(routingValue)); //or in your case, myObject.MySpecialProperty
    

    最后,您需要在搜索时指定路由值。

    client.Search<MyObject>(query => query.Query(q => q.MatchAll()).Routing(routingValue));
    

    使用 NEST v2.4

    【讨论】:

      【解决方案2】:

      您可以使用ElasticType 属性的IdProperty 属性:

      [ElasticType(Name = "mydocument", IdProperty = "docDate")]
      public class MyDocument
      {
          [ElasticProperty(Name = docDate)]
          public DateTime DocDate { get; set; }
      
      ...
      

      这会根据 elasticsearch 中的 _id 字段设置存储的值,该字段用于 routing

      【讨论】:

      • 此解决方案不是 NEST 最新 API 的一部分
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多