如何solr
通过命令删除所有数据?我们正在使用solr
与lily
和hbase
。
如何从hbase和solr中删除数据?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
如何solr
通过命令删除所有数据?我们正在使用solr
与lily
和hbase
。
如何从hbase和solr中删除数据?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Answers:
如果您要清理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数据并没有太多想法。
&commit=true
到查询中,使其变为http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true
没有它,我想知道为什么未删除所有文档。
您可以使用以下命令删除。在“按查询删除”命令中使用“匹配所有文档”查询:
'<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
如果要通过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);
}
}
在“按查询删除”命令中使用“匹配所有文档”查询:
您还必须在运行删除操作后提交,以便清空索引,请运行以下两个命令:
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中定义的效果很好。我编辑了答案。
从命令行使用:
bin/post -c core_name -type text/xml -out yes -d $'<delete><query>*:*</query></delete>'
我来到这里的目的是使用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的学习和测试阶段,因此请在使用此代码之前考虑备份)
在浏览器中触发
http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true
该命令将删除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
在上面的链接中使用过。如果您的核心名称不同,也请更改它。当我从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>
这一行使数据消失,并且更改仍然存在。
清除Solr索引时,还应该在运行“全部删除”查询后进行提交和优化。所需的完整步骤(您只需要卷曲):http : //www.alphadevx.com/a/365-Clearing-a-Solr-search-index
我做了一个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>');
})();
如果您使用的是Cloudera 5.x,则在本文档中此处提到Lily还维护实时更新和删除。
配置Lily HBase NRT索引器服务以与Cloudera Search一起使用
当HBase将插入,更新和删除应用于HBase表单元时,索引器使用标准HBase复制使Solr与HBase表内容保持一致。
不确定是否truncate 'hTable'
也同样支持。
否则,您将创建触发器或服务,以在特定事件或任何事件上从Solr和HBase清除数据。
要删除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请求主体本身效果很好:)