【问题标题】:Elastic search delete operation弹性搜索删除操作
【发布时间】:2014-04-16 06:31:40
【问题描述】:

我是弹性搜索的新手,正在努力从我的收藏中删除一个条目。 我需要一个类似于这个的查询 DELETE FROM message WHERE id='1323'" and created_user = "user@gmail.com"。

以下是我的弹性搜索查询,当我执行此操作时,它只删除特定的 id 字段,它不采用第二个参数 created_user。请帮我解决这个问题。谢谢

var created = "9ed8afe738aa63c28b66994cef1f83c6"
db.delete({
            index: 'outboxpro',
            type: 'message',
            id: req.body.post_id,
            created_user: created
        }, function (error, resp) {
            if (error) {
                return next(error);
            }
            var data = {};
            console.log('delete response',resp);
            if (resp.hits.successful < 1) {
            data = {status: false, message: 'NO POST FOUND TO DELETE', code: 400};
            res.send(data);
            } else {
                return next({status: true, message: 'POST DELETED', data: error, code: 500});
            }
});

//// 编辑 我试过 deleteByQuery,下面是我的代码

db.deleteByQuery({
    index: 'outboxpro',
    type: 'message',
    body:{
        "query": {
            "filtered": {
                "query": {
                    "match": {
                        "_id": {
                            "query": "Kal4AXi5R9G-IMx4GIKYMw"
                        }
                    }
                },
                "filter": {
                    "and": [
                        {
                            "term": {
                                "created_user": created 
                            }
                        }
                    ]
                }
            }
        }
    }
}, function (error, resp) {
    if (error) {
        return next(error);
    }
    console.log('post deleted');
});

【问题讨论】:

  • 您能否提供您的映射以及您从弹性搜索中得到的答案?

标签: node.js elasticsearch amazon-elastic-beanstalk


【解决方案1】:

您可以删除与您的查询匹配的文档,在 elasticsearch 中使用 delete by query.. 参考

http://www.elasticsearch.org/guide/en/elasticsearch/client/javascript-api/current/api-reference-1-0.html#api-deletebyquery-1-0

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete-by-query.html

  db.deleteByQuery({
    index: 'outboxpro',
    type: 'message',
    body: {

        "query": {
            "filtered": {
                "query": {
                    "match": {
                        "_id": "Kal4AXi5R9G-IMx4GIKYMw"
                    }
                },
                "filter": {
                    "term": {
                        "created_user": "created"
                    }
                }
            }
        }
    },
    function (error, resp) {
        if (error) {
            return next(error);
        }
        console.log('post deleted');
    });

【讨论】:

  • 感谢您的评论。我尝试了 db.deleteByQuery,运行查询没有出现任何错误。但数据没有被删除
  • 你用的是哪个版本的ES??
  • 它应该被删除。我不知道你做错了哪一步..请发布你使用的查询..!
  • 我已经编辑了我的问题以包含 deleteByQuery 代码,你能检查一下吗
  • deleteByQuery 在更新的 API 版本中被移除(在 2.0 上测试)
【解决方案2】:

delete API 将完全按照您的意愿行事,只是以一种稍微迂回的方式。

您首先要做的是搜索要删除的文档,因此请构建一个搜索查询来查找所有 id 为“1323”且 created_user 为“user@gmail.com”的文档。从返回的文档中,您将能够检索文档 ID,然后您需要将其传递给删除 API。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-delete.html

【讨论】:

    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2018-11-28
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    相关资源
    最近更新 更多