首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法删除Solr4中的所有文档

无法删除Solr4中的所有文档
EN

Stack Overflow用户
提问于 2013-03-07 13:42:53
回答 3查看 1.8K关注 0票数 2

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

尝试#1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">0</int>
</lst>
</response>

Solr Admin > collection 1下面,我仍然能看到Num Docs:829060!我认为这意味着delete查询不起作用。

我也看到了结果

代码语言:javascript
复制
http://www.domain.com:8080/solr/collection1/select?q=*%3A*&wt=xml

使用Solarium库的尝试#2

代码语言:javascript
复制
    // 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:

代码语言:javascript
复制
Update query executed
Query status: 0
Query time: 3

我还能看到Num Docs:829060!这也不起作用。

有什么办法解决这个问题吗?

更新

我手动删除了索引文件夹/collection1/data,做了一个DIH完全导入,仍然不能删除新索引中的文档。有什么建议吗?

solrconfig.xml

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-07 15:05:48

你能试着在命令行上查询solr吗?例:

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

运行此查询后,您应该会看到以下内容

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

在solr日志中(例如/var/log/tomcat7 7/catalina.2013-03-07.log)。

我在这里使用POST,只是为了确保GET/stream.body不以奇怪的方式编码事物。我添加了commit属性,以便delete查询自动提交。

另外,你对你的RequestHandler做了什么改变吗?它是覆盖默认值还是类似的东西?检查您的solrconfig.xml并搜索/update。我的包含(这是与solr一起的船只):

代码语言:javascript
复制
<requestHandler name="/update" class="solr.UpdateRequestHandler">
</requestHandler>

不应该有<lst name="defaults"><lst name="appends"<lst name="invariants">

顺便说一句,在打开新搜索之前,索引的更改是不可见的。如果从索引中删除并重新启动solr,会发生什么情况。文件还在吗?

编辑:恰巧是一个bug:https://issues.apache.org/jira/browse/SOLR-3432在模式中添加了一个_version_字段来修复这个问题(这要感谢Nyxynyx的这种精确性)

票数 1
EN

Stack Overflow用户

发布于 2013-03-07 13:46:35

在删除索引中第一种方法中的所有条目后,仍然必须提交:

代码语言:javascript
复制
http://www.domain.com:8080/solr/collection1/update?stream.body=%3Ccommit/%3E
票数 0
EN

Stack Overflow用户

发布于 2015-02-19 06:19:56

只需在浏览器中启动下面的命令即可。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15272748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档