Как удалить все данные 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
Ответы:
Если вы хотите очистить индекс 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
Если вы хотите удалить все данные в 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);
}
}
Используйте запрос «сопоставить все документы» в команде удаления по запросу ::
Вы также должны выполнить фиксацию после выполнения удаления, поэтому, чтобы очистить индекс, выполните следующие две команды:
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>'
Я пришел сюда, чтобы удалить все документы из экземпляра 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
Я попробовал следующие шаги. Это работает хорошо.
Просто щелкните ссылку Удалить все данные 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
в приведенной выше ссылке. пожалуйста, измените и его, если ваше основное имя другое.Приведенные выше примеры 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>
Эта единственная строка удаляла данные, и изменение сохранялось.
При очистке индекса Solr вы также должны выполнить фиксацию и оптимизировать после выполнения запроса на удаление всего. Требуются полные шаги (curl - это все, что вам нужно): http://www.alphadevx.com/a/365-Clearing-a-Solr-search-index
Я сделал закладку 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>');
})();
Если вы используете Cloudera 5.x, здесь в этой документации упоминается, что Лили также поддерживает обновления и удаления в реальном времени.
Настройка службы индексатора Lily HBase NRT для использования с Cloudera Search
Поскольку HBase применяет вставки, обновления и удаления к ячейкам таблицы HBase, индексатор поддерживает соответствие Solr содержимому таблицы HBase, используя стандартную репликацию 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 отлично работает :)