【问题标题】:Delete a document from ElasticSearch index by id通过 id 从 ElasticSearch 索引中删除文档
【发布时间】:2014-05-21 18:59:52
【问题描述】:

我在弹性搜索中有一个文档。 我正在尝试实现一种方法,在该方法中我可以指定字符串 id 以使用 NEST 客户端从索引中删除文档。

这是我要删除的索引文档:

"hits":[{"_index":"movies","_type":"list","_id":"100","_score":0.6349302, "_source" : {
  "owner": "Bob",
  "tags": "Bobita",
  "title": "Movie clips of Bob"
}}

这是我的 C# 代码,它不会删除文档。它说 id 是 NULL。

Uri localhost = new Uri("http://localhost:9200");
            var setting = new ConnectionSettings(localhost);
            setting.SetDefaultIndex("movies");
            var client = new ElasticClient(setting);

            IDeleteResponse resp = client.Delete("100");                

            if (!resp.Found)
            {
                logger.Error("Failed to delete index with id=100");
            }

我错过了什么?

【问题讨论】:

  • 我对 NEST 一无所知,但您似乎缺少类型类型(列表)... ES 的关键是 index/type/id。
  • 在哪里以及如何指定类型和 id?我正在寻找该语法和示例。我的回复如下
  • 如果您在此处查看searchcode.com/codesearch/view/26606126,您会看到我在 Nest 客户端中没有得到的 DeleteById()。我有 Delete、DeleteIndex、DeleteByQuery() 等

标签: elasticsearch nest


【解决方案1】:

我认为这里的问题是 NEST 无法正确推断文档的 Id 属性,因为您没有指定类型。

如果可能,试试这个:

client.Delete<YourMovieType>("100");

【讨论】:

  • 它确实对我有用,所以如果你有这个问题,至少值得一试。
  • 在 NEST 5.x 中不适合我。它使文档保持原样。
  • 你是怎么得到id的?
【解决方案2】:

在 Elasticsearch 7.0 上使用 NEST 7.x,以下代码有效:

 var x = _client.Delete<dynamic>(1);

(其中 1 是 '_id' 值)

如果您尚未定义映射,请使用“动态”。否则我建议使用实际类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2020-07-17
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    相关资源
    最近更新 更多