Як видалити всі дані 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 -
ви можете запустити 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
для внесення змін
Не маю багато уявлення про очищення даних бази даних.
&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
у вищенаведеному посиланні. будь ласка, змініть його також, якщо ім'я вашої основної іншої.Приклади завитків, перш за все, для мене не вдалися, коли я запустив їх із терміналу 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 слід також виконати фіксацію та оптимізацію після запуску запиту видалити всі. Потрібні всі необхідні кроки (необхідне згортання): http://www.alphadevx.com/a/365-Clearing-a-Solr-search-index
Я зробив закладку 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>');
})();
Якщо ви використовуєте Cloudera 5.x, тут у цій документації згадується, що Лілі також підтримує оновлення та видалення в реальному часі.
Налаштування служби індексатора NRT Lily HBase для використання під час пошуку Cloudera
Оскільки 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 чудово працює :)