Jak usunąć wszystkie dane z solr
polecenia? Używamy solr
z lily
i hbase
.
Jak mogę usunąć dane z hbase i solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Jak usunąć wszystkie dane z solr
polecenia? Używamy solr
z lily
i hbase
.
Jak mogę usunąć dane z hbase i solr?
http://lucene.apache.org/solr/4_10_0/tutorial.html#Deleting+Data
Odpowiedzi:
Jeśli chcesz wyczyścić indeks Solr -
możesz odpalić adres URL http -
http://host:port/solr/[core name]/update?stream.body=<delete><query>*:*</query></delete>&commit=true
(zastąp [core name]
nazwą rdzenia, z którego chcesz usunąć). Lub użyj tego, jeśli publikujesz dane xml danych:
<delete><query>*:*</query></delete>
Pamiętaj, commit=true
aby zatwierdzić zmiany
Nie mam jednak wielkiego pomysłu na czyszczenie danych hbase.
&commit=true
do zapytania, aby stało się. http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true
Bez niego zastanawiałem się, dlaczego wszystkie dokumenty nie zostały usunięte.
Aby usunąć, możesz użyć następujących poleceń. Użyj zapytania „dopasuj wszystkie dokumenty” w poleceniu usuwania za pomocą zapytania:
'<delete><query>*:*</query></delete>
Musisz również zatwierdzić po uruchomieniu usuwania, więc aby opróżnić indeks, uruchom następujące dwie komendy:
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'
Inną strategią byłoby dodanie dwóch zakładek w przeglądarce:
http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>
http://localhost:8983/solr/update?stream.body=<commit/>
Dokumenty źródłowe z SOLR:
https://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F
Jeśli chcesz usunąć wszystkie dane w Solr przez SolrJ, zrób coś takiego.
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);
}
}
Jeśli chcesz usunąć wszystkie dane w HBase, zrób coś takiego.
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);
}
}
Użyj zapytania „dopasuj wszystkie dokumenty” w poleceniu usuwania za pomocą zapytania :
Musisz również zatwierdzić po uruchomieniu usuwania, więc aby opróżnić indeks, uruchom następujące dwie komendy:
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>
zdefiniowanym adresem URL. Zredagowałem odpowiedź.
Z linii poleceń użyj:
bin/post -c core_name -type text/xml -out yes -d $'<delete><query>*:*</query></delete>'
Przyszedłem tutaj, aby usunąć wszystkie dokumenty z instancji SOLR za pośrednictwem frameworka .Net przy użyciu SolrNet. Oto jak udało mi się to zrobić:
Startup.Init<MyEntity>("http://localhost:8081/solr");
ISolrOperations<MyEntity> solr =
ServiceLocator.Current.GetInstance<ISolrOperations<MyEntity>>();
SolrQuery sq = new SolrQuery("*:*");
solr.Delete(sq);
solr.Commit();
Spowodowało to wyczyszczenie wszystkich dokumentów. (Nie jestem pewien, czy da się to odzyskać, jestem w fazie uczenia się i testowania Solr, więc przed użyciem tego kodu rozważ wykonanie kopii zapasowej)
odpalić to w przeglądarce
http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true
to polecenie usunie wszystkie dokumenty w indeksie w solr
Wypróbowałem poniższe kroki. To dobrze działa.
Po prostu kliknij łącze Usuń wszystkie dane SOLR, które trafią i usuwają wszystkie dane zindeksowane przez SOLR, a na ekranie pojawią się następujące szczegóły.
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">494</int>
</lst>
</response>
jeśli nie otrzymujesz powyższych wyników, upewnij się, że są spełnione następujące warunki.
host
(localhost) i port
(8080) w powyższym linku. zmień hosta i port, jeśli na końcu są inne.collection
/ collection1
. Użyłem collection1
w powyższym linku. zmień je również, jeśli Twoja główna nazwa jest inna.Przede wszystkim przykłady curl zawiodły, gdy uruchomiłem je z terminala Cygwin. Wystąpiły takie błędy, gdy uruchomiłem przykładowy skrypt.
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>
Musiałem użyć funkcji usuwania w pętli na podstawowych nazwach, aby usunąć je wszystkie w projekcie.
To zapytanie poniżej działało dla mnie w skrypcie terminala 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>
Ta jedna linia spowodowała, że dane zniknęły, a zmiana się utrzymała.
Podczas czyszczenia indeksu Solr powinieneś również wykonać zatwierdzenie i optymalizację po uruchomieniu zapytania delete-all. Wymagane pełne kroki (potrzebujesz tylko curl): http://www.alphadevx.com/a/365-Clearing-a-Solr-search-index
Zrobiłem zakładkę JavaScript, która dodaje link do usuwania w 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>');
})();
Jeśli używasz Cloudera 5.x, w tej dokumentacji jest wspomniane, że Lily utrzymuje również aktualizacje i usuwanie w czasie rzeczywistym.
Konfigurowanie usługi Lily HBase NRT Indexer do użytku z Cloudera Search
Ponieważ HBase stosuje wstawianie, aktualizowanie i usuwanie do komórek tabeli HBase, indeksator utrzymuje zgodność Solr z zawartością tabeli HBase, używając standardowej replikacji HBase.
Nie jestem pewien, czy truncate 'hTable'
jest również obsługiwany w tym samym.
W przeciwnym razie utworzysz wyzwalacz lub usługę, aby wyczyścić dane zarówno z Solr, jak i HBase w określonym Zdarzeniu lub czymkolwiek.
Aby usunąć wszystkie dokumenty z kolekcji Solr, możesz skorzystać z tego żądania:
curl -X POST -H 'Content-Type: application/json' --data-binary '{"delete":{"query":"*:*" }}' http://localhost:8983/solr/my_collection/update
Używa treści JSON.
/update?commit=true
. Sama treść żądania JSON działa świetnie :)