2

すべてのドキュメントを削除したいSolr4インデックスがあります。

試行#1:

http://www.domain.com:8080/solr/collection1/update?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E

http://www.domain.com:8080/solr/collection1/update?stream.body=%3Ccommit/%3E

結果#1:

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
</lst>
</response>

の下にSolr Admin > collection 1、私はまだ見えますNum Docs:829060!これは、削除クエリが機能しなかったことを意味していると思います。

に行くと結果も表示されます

http://www.domain.com:8080/solr/collection1/select?q=*%3A*&wt=xml

ソラリウムPHPライブラリを使用した#2の試み

    // Create a client instance
    $config = array(
        'endpoint' => array(
            'localhost' => array(
                'host' => '127.0.0.1',
                'port' => 8080,
                'path' => '/solr/',
            )
        )
    );
    $client = new Solarium\Client($config);

    // get an update query instance
    $update = $client->createUpdate();

    // add the delete query and a commit command to the update query
    $update->addDeleteQuery('*:*');
    $update->addCommit();

    // this executes the query and returns the result
    $result = $client->update($update);

    echo '<b>Update query executed</b><br/>';
    echo 'Query status: ' . $result->getStatus(). '<br/>';
    echo 'Query time: ' . $result->getQueryTime();

出力#2:

Update query executed
Query status: 0
Query time: 3

まだ見えますNum Docs:829060!これもうまくいきませんでした。

問題を解決する方法はありますか?


アップデート

インデックスフォルダを手動で削除/collection1/dataし、DIHの完全インポートを実行しましたが、新しいインデックスのドキュメントを削除できません。助言がありますか?

solrconfig.xml

<requestHandler name="/update" class="solr.UpdateRequestHandler">
  <!-- See below for information on defining 
       updateRequestProcessorChains that can be used by name 
       on each Update Request
    -->
  <!--
     <lst name="defaults">
       <str name="update.chain">dedupe</str>
     </lst>
     -->
</requestHandler>
4

3 に答える 3

1

コマンド ラインで solr のクエリを実行できますか? 例えば:

curl http://domain.com:8080/solr/collection1/update?commit=true -H "Content-Type: text/xml" --data-binary '<delete><query>*:*</query></delete>'

このクエリを実行すると、次のように表示されます。

INFO: [phisch-dev] webapp=/solr path=/update params={wt=javabin&version=2} {deleteByQuery=*:* (-1428803632004857856)} 0 126

solr ログ (例: /var/log/tomcat7/catalina.2013-03-07.log)。

ここでは POST を使用しています。これは、GET/stream.body が奇妙な方法でエンコードされないようにするためです。commit 属性を追加して、削除クエリが自動的にコミットされるようにしました。

また、RequestHandler に何か変更を加えましたか? デフォルトなどを上書きしますか?solrconfig.xml を確認し、/update を検索してください。私のものは含まれています(これはsolrに同梱されているものです):

<requestHandler name="/update" class="solr.UpdateRequestHandler">
</requestHandler>

<lst name="defaults"><lst name="appends"または_<lst name="invariants">

ところで、インデックスへの変更は、新しい検索が開かれるまで表示されません。インデックスから削除して solr を再起動するとどうなりますか。書類はまだですか?

編集: たまたまバグです: https://issues.apache.org/jira/browse/SOLR-3432スキーマにフィールドを 追加すると、これが_version_修正されます (この精度については Nyxynyx に感謝します)。

于 2013-03-07T15:05:48.400 に答える
0

インデックスの最初のアプローチですべてのエントリを削除した後も、それをコミットする必要があります。

http://www.domain.com:8080/solr/collection1/update?stream.body=%3Ccommit/%3E
于 2013-03-07T13:46:35.217 に答える
0

ブラウザで以下のコマンドを実行するだけです。

http://localhost:8983/solr/update?stream.body=:&commit=true

于 2015-02-19T06:19:56.963 に答える