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


Как удалить все данные из solr по команде? Мы используем solr с lily и hbase.

как я могу удалить данные из hbase и solr?

http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+данные

16 79

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>');
})();

enter image description here

Если вы используете Cloudera 5.x, здесь в этой документации упоминается, что Лили также поддерживает обновления и удаления в реальном времени.

настройка службы индексатора Lily HBase NRT для использования с Cloudera Search

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

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

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

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

truncate 'table_name'

он удалит все ключи строк из таблицы hbase.