如何从Solr和HBase删除所有数据


Answers:


190

如果您要清理Solr索引-

您可以触发http url-

http://host:port/solr/[core name]/update?stream.body=<delete><query>*:*</query></delete>&commit=true

(替换[core name]为您要删除的核心的名称)。或在发布数据xml数据时使用:

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

确保commit=true用于提交更改

不过,对于清除hbase数据并没有太多想法。


7
如果您使用多核设置,则需要core。
Jayendra

1
该答案讨论了如何删除hbase中的所有表: stackoverflow.com/questions/3990952/…。如果只想删除表中的数据,则可以截断它们而不是删除它们。
codingFoo

它只会删除索引吗?还是还会删除真实数据?
vishnu viswanath

6
您可能想将其添加&commit=true到查询中,使其变为http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true没有它,我想知道为什么未删除所有文档。
chris544 2015年

2
没用 我得到:HTTP错误404访问/ solr / update时出现问题。原因:找不到从Solr ...
Stepan Yakovenko

91

我已经使用此请求删除了所有记录,但是有时有必要提交此记录。

为此,添加&commit=true到您的请求:

http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true

11

您可以使用以下命令删除。在“按查询删除”命令中使用“匹配所有文档”查询:

'<delete><query>*:*</query></delete>

您还必须在运行删除操作后提交,因此,要清空索引,请运行以下两个命令:

curl http://localhost:8983/solr/update --data '<delete><query>*:*</query></delete>' -H 'Content-type:text/xml; charset=utf-8'
curl http://localhost:8983/solr/update --data '<commit/>' -H 'Content-type:text/xml; charset=utf-8'

另一种策略是在浏览器中添加两个书签:

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>
http://localhost:8983/solr/update?stream.body=<commit/>


来自SOLR的原始文档:https :
//wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F


10

发布json数据(例如,使用curl)

curl -X POST -H 'Content-Type: application/json' \
    'http://<host>:<port>/solr/<core>/update?commit=true' \
    -d '{ "delete": {"query":"*:*"} }'

8

如果要通过SolrJ删除Solr中的所有数据,请执行以下操作。

public static void deleteAllSolrData() {
    HttpSolrServer solr = new HttpSolrServer("http://localhost:8080/solr/core/");
    try {
      solr.deleteByQuery("*:*");
    } catch (SolrServerException e) {
      throw new RuntimeException("Failed to delete data in Solr. "
          + e.getMessage(), e);
    } catch (IOException e) {
      throw new RuntimeException("Failed to delete data in Solr. "
          + e.getMessage(), e);
    }
}

如果要删除HBase中的所有数据,请执行以下操作。

public static void deleteHBaseTable(String tableName, Configuration conf) {
    HBaseAdmin admin = null;    
    try {
        admin = new HBaseAdmin(conf);
        admin.disableTable(tableName);
        admin.deleteTable(tableName);
    } catch (MasterNotRunningException e) {
        throw new RuntimeException("Unable to delete the table " + tableName
        + ". The actual exception is: " + e.getMessage(), e);
    } catch (ZooKeeperConnectionException e) {
        throw new RuntimeException("Unable to delete the table " + tableName
        + ". The actual exception is: " + e.getMessage(), e);
    } catch (IOException e) {
        throw new RuntimeException("Unable to delete the table " + tableName
        + ". The actual exception is: " + e.getMessage(), e);
    } finally {
        close(admin);
    }
 }

4

在“按查询删除”命令中使用“匹配所有文档”查询

您还必须在运行删除操作后提交,以便清空索引,请运行以下两个命令:

curl http://localhost:8983/solr/update --data '<delete><query>*:*</query></delete>' -H 'Content-type:text/xml; charset=utf-8'

curl http://localhost:8983/solr/update --data '<commit/>' -H 'Content-type:text/xml; charset=utf-8'

<core>url中定义的效果很好。我编辑了答案。
Achala Dissanayake,


3

我来到这里的目的是使用SolrNet通过.Net框架从solr实例中删除所有文档。这是我能够做到的方式:

Startup.Init<MyEntity>("http://localhost:8081/solr");
ISolrOperations<MyEntity> solr =
    ServiceLocator.Current.GetInstance<ISolrOperations<MyEntity>>();
SolrQuery sq = new SolrQuery("*:*");
solr.Delete(sq);
solr.Commit();

这样就清除了所有文件。(我不确定这是否可以恢复,我处于Solr的学习和测试阶段,因此请在使用此代码之前考虑备份)


这是非常有用的。谢谢 !
卡兰

3

在浏览器中触发

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true 该命令将删除solr索引中的所有文档


如果可以的话,请编辑您的答案并解释所显示的代码的功能,以及该代码为何/如何回答问题,这确实有帮助。
Lea Cohen 2015年

上面的答案现在可以吗..?
bittu 2015年

当然更了解:)。
Lea Cohen

2

我已使用此查询删除所有记录。

http://host/solr/core-name/update?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&commit=true

2

我尝试了以下步骤。效果很好。

  • 请确保SOLR服务器正在运行
  • 只需单击“ 删除所有SOLR数据 ”链接,该数据将命中并删除所有SOLR索引数据,然后您将在屏幕上获得以下详细信息作为输出。

    <response>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">494</int>
      </lst>
    </response>
  • 如果没有得到上述输出,请确保以下内容。

    • 我在上面的链接上使用了默认的host(localhost)和port(8080)。如果您的主机和端口不同,请更改它。
    • 默认核心名称应为collection/ collection1。我collection1在上面的链接中使用过。如果您的核心名称不同,也请更改它。

1

如果需要清除所有数据,则重新创建集合的速度可能更快,例如

solrctl --zk localhost:2181/solr collection --delete <collectionName>
solrctl --zk localhost:2181/solr collection --create <collectionName> -s 1

1

当我从cygwin终端运行它们时,上述所有卷曲示例对我来说都失败了。当我运行脚本示例时,出现了这样的错误。

curl http://192.168.2.20:7773/solr/CORE1/update --data '<delete><query>*:*</query></delete>' -H 'Content-type:text/xml; charset=utf-8'
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">1</int></lst>
</response>
<!-- 
     It looks like it deleted stuff, but it did not go away
     maybe because the committing call failed like so 
-->
curl http://192.168.1.2:7773/solr/CORE1/update --data-binary '' -H 'Content-type:text/xml; charset=utf-8'
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">400</int><int name="QTime">2</int></lst><lst name="error"><str name="msg">Unexpected EOF in prolog
 at [row,col {unknown-source}]: [1,0]</str><int name="code">400</int></lst>
</response>

我需要在核心名称循环中使用delete,以在项目中将其全部清除。

以下查询在Cygwin终端脚本中为我工作。

curl http://192.168.1.2:7773/hpi/CORE1/update?stream.body=<delete><query>*:*</query></delete>&commit=true
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">1</int></lst>
</response>

这一行使数据消失,并且更改仍然存在。


1

Solr我不确定,但是您可以使用truncate命令从hbase删除所有数据,如下所示:

truncate 'table_name'

它将删除hbase表中的所有行键。



0

我做了一个JavaScript书签,该书签在Solr Admin UI中添加了删除链接

javascript: (function() {
    var str, $a, new_href, href, upd_str = 'update?stream.body=<delete><query>*:*</query></delete>&commit=true';
    $a = $('#result a#url');
    href = $a.attr('href');
    str = href.match('.+solr\/.+\/(.*)')[1];
    new_href = href.replace(str, upd_str);
    $('#result').prepend('<a id="url_upd" class="address-bar" href="' + new_href + '"><strong>DELETE ALL</strong>   ' + new_href + '</a>');
})();

在此处输入图片说明


0

如果您使用的是Cloudera 5.x,则在本文档中此处提到Lily还维护实时更新和删除。

配置Lily HBase NRT索引器服务以与Cloudera Search一起使用

当HBase将插入,更新和删除应用于HBase表单元时,索引器使用标准HBase复制使Solr与HBase表内容保持一致。

不确定是否truncate 'hTable'也同样支持。

否则,您将创建触发器或服务,以在特定事件或任何事件上从Solr和HBase清除数据。


0

要删除Solr集合的所有文档,可以使用以下请求:

curl -X POST -H 'Content-Type: application/json' --data-binary '{"delete":{"query":"*:*" }}' http://localhost:8983/solr/my_collection/update

它使用JSON主体。


正如其他人指出的那样,使用它可能更好/update?commit=true。JSON请求主体本身效果很好:)
Frederick Zhang
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.