我正在尝试使用基于属性的映射来设置我的映射
我需要设置路由,使其成为必需并设置为我正在索引的对象上的特定属性。
这可能吗?有没有人做到这一点?
首先,您需要在创建索引时进行所需的路由,如下所示:
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
您可以使用IdProperty
属性的ElasticType
属性:
[ElasticType(Name = "mydocument", IdProperty = "docDate")]
public class MyDocument
{
[ElasticProperty(Name = docDate)]
public DateTime DocDate { get; set; }
...
这会根据_id
elasticsearch 中的字段设置存储的值,该字段用于路由。