web-dev-qa-db-ja.com

Solr AdminからSolrドキュメントを削除する

SOLR Adminを使用してSOLRインデックス内のすべてのドキュメントを削除するにはどうすればよいですか。

私はURLを使用しようとしましたが、それは動作しますが、管理者を使用して同じことができるかどうかを知りたいです。

34
user1050619

更新:Solrの新しいバージョンは、この回答でより良く機能する可能性があります: https://stackoverflow.com/a/48007194/3692256

私の元の答えは以下の通りです:


私は少しだましていますが、クエリを手で書くほどではありません。

私は以前に誤って削除するという痛みを経験したことがあるので、可能な限り(あらゆる種類のデータストアで)削除を確実にしようとします。

1)左上にある「q」パラメーターのみを使用して、Solr管理クエリ画面でクエリを実行します。実際に削除するアイテムに絞り込みます。この例では、*:*を使用していますが、id:abcdefや範囲などを使用できます。クレイジーな複雑なクエリがある場合は、削除するデータの各部分に1回ずつ、これを複数回行う方が簡単な場合があります。

2)結果の上に、グレー表示されたURLがあります。マウスをその上に置くと、黒に変わります。これは、結果を取得するために使用されたURLです。右(コンテキスト)をクリックして、新しいタブ/ウィンドウで開きます。次のようなものが得られるはずです。

http://localhost:8983/solr/my_core_name/select?q=*%3A*&wt=json&indent=true

今、私はそれを削除形式にしたいです。 select?q=update?commit=true&stream.body=<delete><query>に置き換え、最後に&wt=json&indent=true</query></delete>に置き換えます。

だから私は最終的に:

http://localhost:8983/solr/my_core_name/update?commit=true&stream.body=<delete><query>*%3A*</query></delete>

深呼吸して、幸運のために何でもし、URLを送信します(キーを入力してください)。

これで、Solr管理ページに戻って元のクエリを実行し、結果がゼロになるはずです。

53
Guy Schalnat

Solr Admin UIのDocumentタブで以下のクエリのいずれかを使用します。

XML:

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

JSON:

_{'delete': {'query': '*:*'}}
_

必ず_Document Type_ドロップダウンをSolr Command (raw XML or JSON)に選択してください。

53
Nanda Kumar
curl http://localhost:8080/solr/update -H "Content-type: text/xml" --data-binary '<delete><query>*:*</query></delete>'
curl http://localhost:8080/solr/update -H "Content-type: text/xml" --data-binary '<commit />'
8
user3754136

このソリューションは、選択した削除ではなく、複数のコレクション内のすべてのドキュメントを削除する場合にのみ適用できます。


同じシナリオで、複数のコレクションのすべてのドキュメントを削除する必要がありました。各シャードには50万件近くのドキュメントがあり、各コレクションには複数のシャードがありました。クエリを使用してドキュメントを更新および削除することは大きなタスクであったため、以下のプロセスに従いました。

  1. すべてのコレクションの詳細を取得するためにSolr APIを使用しました-
    http://<solrIP>:<port>/solr/admin/collections?action=clusterstatus&wt=json
    
    これは、コレクションの名前、numShards、configname、router.field、maxShards、replicationFactorなどの詳細を提供します。
  2. 上記の詳細を含む出力jsonを将来の参照用にファイルに保存し、次のAPIを使用して、ドキュメントを削除するために必要なすべてのコレクションのバックアップを取りました。
    http://<solr-ip>:<port>/solr/admin/collections?action=BACKUP&name=myBackupName&collection=myCollectionName&location=/path/to/my/shared/drive
    
  3. さらに、以下を使用するためにすべてのドキュメントを削除する必要があるすべてのコレクションを削除しました。
    http://<solr-ip>:<port>/solr/admin/collections?action=DELETEALIAS&name=collectionname
    
  4. ステップ1の詳細と次のAPIを使用して、すべてのコレクションを再作成しました。
    http://<solr-ip>:<port>/solr/admin/collections?action=CREATE&name=collectionname&numShards=number&replicationFactor=number&maxShardsPerNode=number&collection.configName=configname&router.field=routerfield
    

上記の手順をすべてのコレクションに対してループで実行し、膨大なデータを持つ約100のコレクションに対して数秒で完了しました。さらに、すべてのコレクションのバックアップもありました。

他のSolr APIについては、こちらを参照してください: DELETEALIAS:Delete a Collection Alias、Input

1
Pranav Advani