Jak usunąć wszystkie dane z solr i hbase


Odpowiedzi:


190

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=trueaby zatwierdzić zmiany

Nie mam jednak wielkiego pomysłu na czyszczenie danych hbase.


7
rdzeń jest potrzebny, jeśli używasz konfiguracji wielordzeniowej.
Jayendra,

1
W tej odpowiedzi omówiono, jak usunąć wszystkie tabele w hbase: stackoverflow.com/questions/3990952/… . Jeśli chcesz po prostu usunąć dane w tabeli, możesz je obciąć, a nie upuścić.
codingFoo

czy tylko usuwa indeks? czy też usunie prawdziwe dane?
vishnu viswanath

6
Możesz chcieć dodać &commit=truedo zapytania, aby stało się. http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=trueBez niego zastanawiałem się, dlaczego wszystkie dokumenty nie zostały usunięte.
chris544

2
To nie działa. Otrzymuję: HTTP ERROR 404 Problem z dostępem do / solr / update. Powód: nie znaleziono w solr ...
Stepan Yakovenko

91

Użyłem tego żądania, aby usunąć wszystkie moje rekordy, ale czasami jest to konieczne.

W tym &commit=truecelu dodaj do swojej prośby:

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

11

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


10

Opublikuj dane json (np. Z curl)

curl -X POST -H 'Content-Type: application/json' \
    'http://<host>:<port>/solr/<core>/update?commit=true' \
    -d '{ "delete": {"query":"*:*"} }'

8

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

4

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'

Działa dobrze ze <core>zdefiniowanym adresem URL. Zredagowałem odpowiedź.
Achala Dissanayake

4

Z linii poleceń użyj:

 bin/post -c core_name -type text/xml -out yes -d $'<delete><query>*:*</query></delete>'

3

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)


To jest bardzo przydatne. Dziękuję Ci !
Karan

3

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


Gdybyś mógł edytować swoją odpowiedź i wyjaśnić, co robi pokazany kod oraz dlaczego / jak ten kod odpowiada na pytanie, mogłoby to naprawdę pomóc.
Lea Cohen

czy powyższa odpowiedź jest teraz w porządku ..?
bittu

Z pewnością jest to bardziej zrozumiałe :).
Lea Cohen

2

Użyłem tego zapytania, aby usunąć wszystkie moje rekordy.

http://host/solr/core-name/update?stream.body=%3Cdelete%3E%3Cquery%3E*:*%3C/query%3E%3C/delete%3E&commit=true

2

Wypróbowałem poniższe kroki. To dobrze działa.

  • Upewnij się, że serwer SOLR jest uruchomiony
  • 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.

    • Użyłem domyślnego host(localhost) i port(8080) w powyższym linku. zmień hosta i port, jeśli na końcu są inne.
    • Domyślną nazwą rdzenia powinno być collection/ collection1. Użyłem collection1w powyższym linku. zmień je również, jeśli Twoja główna nazwa jest inna.

1

Jeśli chcesz wyczyścić wszystkie dane, może być szybsze odtworzenie kolekcji, np

solrctl --zk localhost:2181/solr collection --delete <collectionName>
solrctl --zk localhost:2181/solr collection --create <collectionName> -s 1

1

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.


1

Solr Nie jestem pewien, ale możesz usunąć wszystkie dane z hbase za pomocą polecenia truncate jak poniżej:

truncate 'table_name'

Spowoduje to usunięcie wszystkich kluczy wierszy z tabeli hbase.



0

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

wprowadź opis obrazu tutaj


0

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.


0

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.


Jak podkreślali inni, prawdopodobnie lepiej jest użyć /update?commit=true. Sama treść żądania JSON działa świetnie :)
Frederick Zhang
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.