2016-07-27 85 views
6

我有一個項目在Java中,我使用彈性搜索2.3.3索引數據。這些索引有兩種類型。刪除索引按索引名稱和類型使用elasticSearch 2.3.3在java

我的指數文檔的樣子:

{ 
    "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」指標,並鍵入「劇」

所以結果應該是這樣的:

{ 
    "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()指數()刪除(新DeleteIndexRequest( 「的test_index」)actionGet(。 );

但是,刪除名稱爲 「的test_index」 兩個指數

我也試圖在感測試版插件喜歡各種查詢:

DELETE /的test_index /劇情

它給人的錯誤:沒有處理髮現的URI [/的test_index /劇情]和方法[刪除]

DELETE /的test_index /劇情/ _query q = _id:* & analyze_wildcard =真

它也不起作用。

當我在此時觸發刪除索引請求時,索引id對我們來說是未知的,我不得不按名稱和類型刪除索引。

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

+1

您是否安裝了[刪除-通過查詢插件(HTTPS://www.elastic。CO /引導/ EN/elasticsearch /插件/ 2.3 /插件,刪除逐query.html)?最新的查詢適用於我,只刪除'test_index/drama'中的文檔。 – Val

回答

2

以前可以使用直到ES 2.0使用刪除映射API,但是因爲2.0 Delete Mapping API不再存在。 要做到這一點,你將不得不安裝Delete by Query插件。然後,您可以簡單地對您的索引和類型進行匹配所有查詢,然後刪除所有這些查詢。

查詢將是這個樣子:

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

也請記住,這將刪除映射的文件,而不是映射本身。如果您也想刪除映射,則必須在沒有映射的情況下重新編制索引。

This也許能幫助你用Java實現

+0

非常感謝。它爲我工作。 – ajain