【问题标题】:Getting "An item with this key has already been added" when performing a DeleteByQuery with Nest (Elasticsearch)使用 Nest(Elasticsearch)执行 DeleteByQuery 时获取“已添加具有此键的项目”
【发布时间】: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 字段的映射吗? startTimestampendTimestamp 的类型?
  • @Rob 我已经添加了用于创建索引的代码以及用于映射对象的代码。 startTimestampendTimestamp 都是 longs,在我的 C# 对象中映射到 EventTime
  • hmm ...仍然无法重现该问题(针对 NEST 1.5.1 和 ES 1.5.2 进行了测试)。可以发布样本文件吗?我可以分享我的小例子,所以也许它会有所启发。
  • @Rob 我已经包含了一个来自我对 ES 执行的搜索的示例文档。我最初从文档中省略了一些额外的字段以降低长度

标签: c# elasticsearch nest


【解决方案1】:

Rob 和我刚刚解决了这个问题。

这里发生的问题是我的项目使用Newtonsoft.Json 版本7.0.0 和Nest 版本1.5.1,而Nest 1.5.1 需要6.0.1。这种不匹配导致查询的序列化引发异常。

这可以通过将 Nest 升级到版本 1.6.1 或将 Newtonsoft.Json 降级到版本 6.0.1 来解决。

【讨论】:

  • 非常感谢!通过发布此答案,您为我节省了几个小时(如果不是几天)!
【解决方案2】:

我只是将 newtonsoft.json 更新为最新版本。我当前的版本是 5.0.1,我已经更新到 9.0.1。之后,错误就消失了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 2017-04-15
    相关资源
    最近更新 更多