ブールNOT表記を使用してSolrからすべてのドキュメントを選択/削除するにはどうすればよいですか?
つまり、IDがA59で始まらないすべてのドキュメントをSolrから削除するにはどうすればよいですか?
NOT
を示すには、-
を使用します。
たとえば、A59で始まらないIDのドキュメントをクエリするには、クエリは-id:A59*
、つまり/solr/select/?q=-id:A59*
になります。
クエリで削除するには、 here のように、クエリを削除メッセージで更新ハンドラに投稿します。
編集:NOT
(すべて大文字)はブール演算子としても使用できます
感嘆符はNOTでも機能します。
/solr/select/?q=!id:A59*
上記のケースで動作するはずです。
クエリによる否定的な削除が機能するとは思いません。次のJiraチケットを参照してください。 https://issues.Apache.org/jira/browse/SOLR-381
彼らは:にプレフィックスを付ける回避策があると言いますが、私はそれでうまくいきません。
これは機能しません(NOTの使用と同じ)Java -Ddata = args -jar /opt/solr/example/exampledocs/post.jar "-userid:*" Java -jar /opt/solr/example/exampledocs/post.jar * .xml
:を追加すると、構文エラーが発生します(NOTを使用した場合と同じ)Java -Ddata = args -jar /opt/solr/example/exampledocs/post.jar ":-userid:*" = Java -jar /opt/solr/example/exampledocs/post.jar * .xml
SimplePostTool:バージョン1.4 SimplePostTool:POSTing args to http:// localhost:8983/solr/update .. SimplePostTool:FATAL:エラーが返されました#400 Luceneクエリの解析SimplePostTool:バージョン1.4
Mauricio が述べたように:
-記号を使用して、クエリで除外するものを指定します。次の2つのクエリは、A59で始まるドキュメントを除くすべてのドキュメントを削除します。
GET http://<url>/solr/<core>/update?stream.body=<delete><query>-id:A59*</query></delete>
GET http://<url>/solr/<core>/update?stream.body=<commit/>
最初の行は削除操作を行います。 2行目はコミットを行います。
ファイルの前に-記号を使用すると、その特定の値が除外されます。 NOT Equalのような結果が得られます
以下は、サンプルのURLクエリ文字列です。私は "&fq = -HQ_City_Code:MEL"を保持しました、
HQ_City_Code value [〜#〜] mel [〜#〜]であるすべての結果をスキップします。
http://localhost:8983/solr/HQ_SOLR_Hotels/select?q=*:*&fq=HQ_National_Code:TH&fq=HQ_TYPE:hotel_EN&fq=HQ_Country_Code:AU&**fq=-HQ_City_Code:MEL**&wt=json&indent=true
削除する前に、参照しているIDが文字列であり、2つの用語を組み合わせて形成されていないことを確認してください。私が行う方法は、スクリプトからsolrからデータを読み取り、単一の削除またはバッチで実行することです。これは、各IDに対するより優れた制御と検証を提供し、誤った削除のリスクを軽減するため、1からsolrからデータを読み取ります/ solr/select /?q = id:A59 *を使用するスクリプト
2 IDを確認および検証する
3それらを1つずつ、または一度に10個のIDのグループから削除します
よろしく
ラジャット