使用NEST和属性映射在ElasticSearch中设置路由

时间:2014-09-19 11:47:16

标签: elasticsearch nest elasticsearch-net

我正在尝试使用Attribute based mapping

设置我的地图

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

这可能吗?有没有人完成这个?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

...

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