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

时间:2016-07-27 06:49:31

标签: java spring elasticsearch java-api

我在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",
           "_score": 1,
           "_source": {
              "genre": "SuperNatural"
            }
        },
        {
           "_index": "index1",
           "_type": "drama",
           "_id": "cReb0g9KSKLS18sT76ng3B",
           "_score": 1,
           "_source": {
              "genre": "Romance"
            }
         }
      ]
   }
}

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

例如: - 从上述文档中,我想删除名称为“test_index”的索引,并输入“drama”

所以结果应该是这样的:

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

已尝试解决方案:

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

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

我还尝试了 sense beta插件中的各种查询:

DELETE / test_index / drama

它给出错误:找不到uri [/ test_index / drama]和方法[DELETE]

的处理程序

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

它也不起作用。

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

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

1 个答案:

答案 0 :(得分:2)

过去可以使用删除映射API直到ES 2.0,但由于2.0 Delete Mapping API不再存在。 为此,您必须安装Delete by Query插件。然后,您只需对索引和类型进行匹配所有查询,然后删除所有查询。

查询将如下所示:

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

另请注意,这将删除映射中的文档,而不是映射本身。如果您想要删除映射,则必须在没有映射的情况下重新索引。

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