微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用java中的elasticSearch 2.3.3按索引名称和类型删除索引

我在java中有一个项目,我使用弹性搜索2.3.3索引数据.索引有两种类型.

我的索引文档看起来像:

{
   "took": 10,"timed_out": false,"_shards": {
      "total": 1,"successful": 1,"Failed": 0
   },"hits": {
      "total": 3,"max_score": 1,"hits": [
        {
           "_index": "test_index","_type": "movies","_id": "uReb0g9KSLKS18sTATdr3A","_score": 1,"_source": {
              "genre": "Thriller"
            }
       },{
           "_index": "test_index","_type": "drama","_id": "cReb0g9KSKLS18sTATdr3B","_source": {
              "genre": "SuperNatural"
            }
        },{
           "_index": "index1","_id": "cReb0g9KSKLS18sT76ng3B","_source": {
              "genre": "Romance"
            }
         }
      ]
   }
}

我需要删除特定名称的索引和类型.

例如: – 从上面的doc,我想删除名为“test_index”的索引并输入“drama”.

所以结果应该是这样的:

{
   "took": 10,"hits": {
      "total": 2,"_source": {
              "genre": "Romance"
            }
         }
      ]
   }
}

解决方案:

client.admin().indices().delete(new DeleteIndexRequest(“test_index”).actionGet();

但它删除名为“test_index”的两个索引

我也在感测beta插件中尝试了各种查询,例如:

DELETE / test_index / drama

它给出了错误:找不到uri [/ test_index / drama]和方法[DELETE]的处理程序

DELETE / test_index / drama / _query?q = _id:*& analyze_wildcard = true

它也行不通.

当我在那时触发删除索引请求时,我们不知道索引的id,我只能按名称和类型删除索引.

如何使用java api删除所需的索引?

最佳答案
这曾经是使用删除映射API直到ES 2.0,但是因为2.0 Delete Mapping API不再存在.
为此,您必须安装Delete by Query插件.然后,您可以简单地对索引和类型进行匹配所有查询,然后删除所有这些查询.

查询将如下所示:

DELETE /test_index/drama/_query
{
  "query": { 
    "query": {
        "match_all": {}
    }
  }
}

还要记住,这将删除映射中的文档而不是映射本身.如果您想要删除映射,则必须在没有映射的情况下重新索引.

This可能能够帮助您实现java实现

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐