Як видалити всі дані з solr та hbase


Відповіді:


190

Якщо ви хочете очистити індекс Solr -

ви можете запустити URL-адресу http -

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

(замініть [core name]на ім’я ядра, з якого потрібно видалити). Або скористайтеся цим, якщо розміщуєте дані xml даних:

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

Обов’язково використовуйте commit=trueдля внесення змін

Не маю багато уявлення про очищення даних бази даних.


7
ядро потрібне, якщо ви використовуєте багатоядерні установки.
Jayendra

1
Ця відповідь обговорюється , як видалити всі таблиці в HBase: stackoverflow.com/questions/3990952 / ... . Якщо ви хочете просто видалити дані з таблиці, ви можете їх усікати, а не видаляти.
кодуванняFoo

чи видаляє він лише індекс? чи видалять і справжні дані?
vishnu viswanath

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

2
Це не працює. Я отримую: помилка HTTP 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 -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-адресі. Я відредагував відповідь.
Achala Dissanayake


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, тому, будь ласка, врахуйте резервну копію, перш ніж використовувати цей код)


Це дуже корисно. Дякую !
Каран

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

Приклади завитків, перш за все, для мене не вдалися, коли я запустив їх із терміналу 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>

Цей один рядок змусив дані пройти і зміни збереглися.


1

Solr Я не впевнений, але ви можете видалити всі дані з hbase за допомогою команди усікання, як нижче:

truncate 'table_name'

Це видалить усі ключі рядків із таблиці бази даних.



0

Я зробив закладку JavaScript, яка додає посилання видалення в інтерфейсі Solr Admin

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, тут у цій документації згадується, що Лілі також підтримує оновлення та видалення в реальному часі.

Налаштування служби індексатора NRT Lily HBase для використання під час пошуку Cloudera

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