SolrとHBaseからすべてのデータを削除する方法


回答:


190

Solrインデックスをクリーンアップする場合-

あなたはhttpのURLを発射することができます-

http://host:port/solr/[core name]/update?stream.body=<delete><query>*:*</query></delete>&commit=true

[core name]削除するコアの名前に置き換えます)。または、データxmlデータを投稿する場合は、これを使用します。

<delete><query>*:*</query></delete>

必ずcommit=true変更のコミットに使用して ください

ただし、hbaseデータをクリアすることについてはあまり考えていません。


7
マルチコア設定を使用している場合は、コアが必要です。
Jayendra

1
この回答では、hbase内のすべてのテーブルを削除する方法について説明します: stackoverflow.com/questions/3990952/…。テーブルのデータを削除するだけの場合は、ドロップするのではなく、データを切り捨てることができます。
codingFoo

インデックスを削除するだけですか?それとも実際のデータも削除しますか?
vishnu viswanath 2015年

6
&commit=trueクエリに追加して、それがhttp://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=trueなければ[なし]になるようにした方がよいでしょう。なぜすべてのドキュメントが削除されなかったのかと思っていました。
chris544

2
動作しません。HTTP ERROR 404 / solr / updateへのアクセスに問題が発生します。理由:Solrから見つかりません...
Stepan Yakovenko

91

このリクエストを使用してすべてのレコードを削除しましたが、場合によってはこれをコミットする必要があります。

そのためには、&commit=trueリクエストに追加してください:

http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true

11

次のコマンドを使用して削除できます。クエリによる削除コマンドで「すべてのドキュメントに一致」クエリを使用します。

'<delete><query>*:*</query></delete>

削除を実行した後もコミットする必要があるため、インデックスを空にするには、次の2つのコマンドを実行します。

curl http://localhost:8983/solr/update --data '<delete><query>*:*</query></delete>' -H 'Content-type:text/xml; charset=utf-8'
curl http://localhost:8983/solr/update --data '<commit/>' -H 'Content-type:text/xml; charset=utf-8'

もう1つの戦略は、ブラウザーに2つのブックマークを追加することです。

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>
http://localhost:8983/solr/update?stream.body=<commit/>


SOLRからのソースドキュメント:https ://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F


10

jsonデータの投稿(例:curl)

curl -X POST -H 'Content-Type: application/json' \
    'http://<host>:<port>/solr/<core>/update?commit=true' \
    -d '{ "delete": {"query":"*:*"} }'

8

SolrJを介してSolrのすべてのデータを削除する場合は、次のようにします。

public static void deleteAllSolrData() {
    HttpSolrServer solr = new HttpSolrServer("http://localhost:8080/solr/core/");
    try {
      solr.deleteByQuery("*:*");
    } catch (SolrServerException e) {
      throw new RuntimeException("Failed to delete data in Solr. "
          + e.getMessage(), e);
    } catch (IOException e) {
      throw new RuntimeException("Failed to delete data in Solr. "
          + e.getMessage(), e);
    }
}

HBaseのすべてのデータを削除する場合は、次のようにします。

public static void deleteHBaseTable(String tableName, Configuration conf) {
    HBaseAdmin admin = null;    
    try {
        admin = new HBaseAdmin(conf);
        admin.disableTable(tableName);
        admin.deleteTable(tableName);
    } catch (MasterNotRunningException e) {
        throw new RuntimeException("Unable to delete the table " + tableName
        + ". The actual exception is: " + e.getMessage(), e);
    } catch (ZooKeeperConnectionException e) {
        throw new RuntimeException("Unable to delete the table " + tableName
        + ". The actual exception is: " + e.getMessage(), e);
    } catch (IOException e) {
        throw new RuntimeException("Unable to delete the table " + tableName
        + ". The actual exception is: " + e.getMessage(), e);
    } finally {
        close(admin);
    }
 }

4

クエリによる削除コマンドで「すべてのドキュメントに一致」クエリを使用します

削除を実行した後もコミットする必要があるため、インデックスを空にするには、次の2つのコマンドを実行します。

curl http://localhost:8983/solr/update --data '<delete><query>*:*</query></delete>' -H 'Content-type:text/xml; charset=utf-8'

curl http://localhost:8983/solr/update --data '<commit/>' -H 'Content-type:text/xml; charset=utf-8'

<core>URL で定義されたものとうまく機能しました。答えを編集しました。
Achala Dissanayake


3

SolrNetを使用して.Netフレームワークを介してsolrインスタンスからすべてのドキュメントを削除するためにここに来ました。ここに私がそれをすることができた方法があります:

Startup.Init<MyEntity>("http://localhost:8081/solr");
ISolrOperations<MyEntity> solr =
    ServiceLocator.Current.GetInstance<ISolrOperations<MyEntity>>();
SolrQuery sq = new SolrQuery("*:*");
solr.Delete(sq);
solr.Commit();

これにより、すべてのドキュメントがクリアされました。(これが回復できるかどうかはわかりませんが、私はSolrの学習およびテスト段階にあるので、このコードを使用する前にバックアップを検討してください)


これは非常に便利です。ありがとうございました !
カラン

3

これをブラウザで起動します

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true このコマンドは、solrのインデックス内のすべてのドキュメントを削除します


回答を編集して、表示しているコードが何をするのか、そのコードが質問になぜ/どのように回答するのかを説明していただければ、非常に役立ちます。
Lea Cohen、

上記の答えは大丈夫ですか..?
bittu

それは確かにもっと理解されています:)
Lea Cohen、

2

このクエリを使用してすべてのレコードを削除しました。

http://host/solr/core-name/update?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&commit=true

2

以下の手順を試しました。それはうまくいきます。

  • SOLRサーバーが実行されていることを確認してください
  • すべてのSOLRインデックス付きデータにヒットして削除するリンク「すべてのSOLRデータ削除」をクリックするだけで、画面に次の詳細が出力として表示されます。

    <response>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">494</int>
      </lst>
    </response>
  • 上記の出力が得られない場合は、次のことを確認してください。

    • 上記のリンクではデフォルトhost(localhost)とport(8080)を使用しました。ホストとポートが異なる場合は変更してください。
    • デフォルトのコア名はcollection/ collection1です。collection1上記のリンクで使用しました。コア名が異なる場合も変更してください。

1

すべてのデータを一掃する必要がある場合は、コレクションを再作成する方が速いかもしれません。例えば

solrctl --zk localhost:2181/solr collection --delete <collectionName>
solrctl --zk localhost:2181/solr collection --create <collectionName> -s 1

1

上記のcurlの例は、cygwinターミナルから実行すると失敗しました。スクリプトの例を実行すると、このようなエラーが発生しました。

curl http://192.168.2.20:7773/solr/CORE1/update --data '<delete><query>*:*</query></delete>' -H 'Content-type:text/xml; charset=utf-8'
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">1</int></lst>
</response>
<!-- 
     It looks like it deleted stuff, but it did not go away
     maybe because the committing call failed like so 
-->
curl http://192.168.1.2:7773/solr/CORE1/update --data-binary '' -H 'Content-type:text/xml; charset=utf-8'
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">400</int><int name="QTime">2</int></lst><lst name="error"><str name="msg">Unexpected EOF in prolog
 at [row,col {unknown-source}]: [1,0]</str><int name="code">400</int></lst>
</response>

コア名のループで削除を使用して、プロジェクト内のすべてを削除する必要がありました。

以下のクエリは、Cygwinターミナルスクリプトで機能しました。

curl http://192.168.1.2:7773/hpi/CORE1/update?stream.body=<delete><query>*:*</query></delete>&commit=true
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">1</int></lst>
</response>

この1行でデータが消え、変更が持続しました。


1

Solrわかりませんが、以下のようなtruncateコマンドを使用してhbaseからすべてのデータを削除できます。

truncate 'table_name'

hbaseテーブルからすべての行キーを削除します。



0

Solr管理UIに削除リンクを追加するJavaScriptブックマークを作成しました

javascript: (function() {
    var str, $a, new_href, href, upd_str = 'update?stream.body=<delete><query>*:*</query></delete>&commit=true';
    $a = $('#result a#url');
    href = $a.attr('href');
    str = href.match('.+solr\/.+\/(.*)')[1];
    new_href = href.replace(str, upd_str);
    $('#result').prepend('<a id="url_upd" class="address-bar" href="' + new_href + '"><strong>DELETE ALL</strong>   ' + new_href + '</a>');
})();

ここに画像の説明を入力してください


0

Cloudera 5.xを使用している場合、このドキュメントでは、Lilyがリアルタイムの更新と削除も維持することを説明しています。

Cloudera Searchで使用するためのLily HBase NRTインデクサーサービスの構成

HBaseが挿入、更新、削除をHBaseテーブルセルに適用すると、インデクサーは標準のHBaseレプリケーションを使用してSolrをHBaseテーブルの内容と一致させます。

truncate 'hTable'同じでサポートされているかどうかは不明です。

または、トリガーまたはサービスを作成して、特定のイベントなどでSolrとHBaseの両方からデータをクリアします。


0

Solrコレクションのすべてのドキュメントを削除するには、次のリクエストを使用できます。

curl -X POST -H 'Content-Type: application/json' --data-binary '{"delete":{"query":"*:*" }}' http://localhost:8983/solr/my_collection/update

JSONボディを使用します。


他の人が指摘したように、を使用することをお勧めします/update?commit=true。JSONリクエストの本文自体
Frederick Zhang
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.