【发布时间】:2016-07-21 23:31:20
【问题描述】:
我正在尝试运行删除查询以删除索引中两个时间戳之间的文档,我得到了一个非常奇怪的结果。
这是我的代码:
// how the index is created
if (!es.IndexExists(indexName).Exists)
{
es.CreateIndex(descriptor => descriptor
.Index(indexName)
.AddMapping<MyDocument>(m => m
.MapFromAttributes()));
}
// event object that is mapped
public class MyDocument
{
public long Id { get; set; }
public long EventTime { get; set; }
[ElasticProperty(Index = FieldIndexOption.NotAnalyzed)]
public string EventType { get; set; }
public DateTime CreatedAt { get; set; }
public IDictionary<string, object> Values { get; set; }
// snip
}
// delete call
IElasticClient es;
es.DeleteByQuery<MyDocument>(q => q
.Query(rq => rq
.Range(t => t.OnField("eventTime").GreaterOrEquals(startTimestamp).LowerOrEquals(endTimestamp)));
这会引发异常“已添加具有相同键的项目”。这个删除查询我做错了什么会抛出这个异常?
这是我通过 elasticsearch 进行的搜索中的示例文档:
{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 96,
"max_score" : 1.0,
"hits" : [ {
"_index" : "testing2",
"_type" : "mydocument",
"_id" : "112",
"_score" : 1.0,
"_source":{"id":112,"eventTime":12345690,"eventDate":"1970-05-23T17:21:30-04:00","eventTypeId":0,"ready":false,"name":"","doccount":0,"wordcount":0,"createdAt":"2015-06-25T09:29:33.8996707-04:00","values":{"internal_timestamp":76890.0},"childDocuments":[],"parentDocuments":[]}
}, /* snip */]
}
}
【问题讨论】:
-
您使用哪个版本的 NEST?
-
您可以分享
eventTime字段的映射吗?startTimestamp和endTimestamp的类型? -
@Rob 我已经添加了用于创建索引的代码以及用于映射对象的代码。
startTimestamp和endTimestamp都是longs,在我的 C# 对象中映射到EventTime -
hmm ...仍然无法重现该问题(针对 NEST 1.5.1 和 ES 1.5.2 进行了测试)。可以发布样本文件吗?我可以分享我的小例子,所以也许它会有所启发。
-
@Rob 我已经包含了一个来自我对 ES 执行的搜索的示例文档。我最初从文档中省略了一些额外的字段以降低长度
标签: c# elasticsearch nest