2

我有一个 Solr 4 索引,我想删除它的所有文档。

尝试#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

尝试 #2 使用 Solarium PHP 库

    // 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 回答