Как удалить все данные из solr и hbase


Ответы:


192

Если вы хотите очистить индекс 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

удаляет только индекс? или он удалит и реальные данные?
вишну вишванатх

6
Возможно, вы захотите добавить &commit=trueв запрос, чтобы он стал http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=trueБез него. Мне было интересно, почему не были удалены все документы.
chris544

2
Не работает. Я получаю: HTTP ERROR 404 Проблема с доступом к / solr / update. Причина: Не найдено из solr ...
Степан Яковенко

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

Если вы хотите удалить все данные в 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);
    }
 }

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-адресе. Я отредактировал ответ.
Ачала Диссанаяке


3

Я пришел сюда, чтобы удалить все документы из экземпляра 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, поэтому, пожалуйста, подумайте о резервном копировании перед использованием этого кода)


Это очень полезно. Спасибо !
Karan

3

запустить это в браузере

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true эта команда удалит все документы в индексе в solr


Если бы вы могли отредактировать свой ответ и объяснить, что делает код, который вы показываете, и почему / как этот код отвечает на вопрос, это действительно могло бы помочь.
Леа Коэн,

Вышеупомянутый ответ теперь в порядке ..?
bittu

Это конечно более понятно :).
Леа Коэн,

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

Приведенные выше примеры 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>

Эта единственная строка удаляла данные, и изменение сохранялось.



0

Я сделал закладку JavaScript, которая добавляет ссылку удаления в пользовательском интерфейсе администратора Solr.

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 HBase NRT для использования с Cloudera Search

Поскольку HBase применяет вставки, обновления и удаления к ячейкам таблицы HBase, индексатор поддерживает соответствие Solr содержимому таблицы HBase, используя стандартную репликацию HBase.

Не уверен, что truncate 'hTable'он также поддерживается.

В противном случае вы создаете триггер или службу для очистки данных как от Solr, так и от HBase по определенному событию или чему-либо еще.


0

Solr Я не уверен, но вы можете удалить все данные из hbase, используя команду truncate, как показано ниже:

truncate 'table_name'

Он удалит все ключи строк из таблицы 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 отлично работает :)
Фредерик Чжан,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.