得到";已经添加了具有该键的项目“;当使用Nest(Elasticsearch)执行DeleteByQuery时

本文关键字:Nest Elasticsearch DeleteByQuery 执行 项目 quot 添加 得到 | 更新日期: 2023-09-27 17:59:55

我试图运行一个删除查询来删除索引中两个时间戳之间的文档,但得到了一个非常奇怪的结果。

这是我的代码:

// 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(Elasticsearch)执行DeleteByQuery时

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版本来解决。

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