Как удалить все данные из solr и hbase
Как удалить все данные из solr
по команде? Мы используем solr
с lily
и hbase
.
как я могу удалить данные из hbase и solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+данные
16 ответов:
если вы хотите очистить индекс 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>
вы также должны зафиксировать после запуска 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
Если вы хотите удалить все данные в Solr через SolrJ сделать что-то вроде этого.
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); } }
Post JSON data (например, с curl)
curl -X POST -H 'Content-Type: application/json' \ 'http://<host>:<port>/solr/<core>/update?commit=true' \ -d '{ "delete": {"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'
Я пришел сюда, чтобы удалить все документы из экземпляра solr через .Net framework с помощью SolrNet. Вот как я смог это сделать:
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
я использовал этот запрос, чтобы удалить все мои записи.
http://host/solr/core-name/update?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&commit=true
Если вам нужно, чтобы очистить все данные, это может быть быстрее, чтобы воссоздать коллекцию, например,
solrctl --zk localhost:2181/solr collection --delete <collectionName> solrctl --zk localhost:2181/solr collection --create <collectionName> -s 1
примеры curl, прежде всего, не удалось для меня, когда я запустил их из терминала 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>
мне нужно было использовать удаление в цикле на основных именах, чтобы стереть их все в проекте.
этот запрос ниже работал для меня в сценарии терминала 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>
эта одна строка заставила данные уйти, и изменение сохранилось.
из командной использование строку:
bin/post -c core_name -type text/xml -out yes -d $'<delete><query>*:*</query></delete>'
при очистке индекса Solr вы также должны выполнить фиксацию и оптимизировать после запуска запроса delete-all. Требуются полные шаги (curl-это все, что вам нужно):http://www.alphadevx.com/a/365-Clearing-a-Solr-search-index
Я сделал закладку JavaScript, которая добавляет ссылку delete в 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 HBase NRT для использования с Cloudera Search
поскольку HBase применяет вставки, обновления и удаления к ячейкам таблицы HBase, индексатор сохраняет Solr в соответствии с содержимым таблицы HBase, используя стандартная репликация HBase.
Не уверен если
truncate 'hTable'
также поддерживается в том же.в противном случае вы создаете триггер или службу для очистки ваших данных от Solr и HBase по конкретному событию или чему-либо еще.