Solr ve hbase'den tüm veriler nasıl silinir


Yanıtlar:


192

Solr indeksini temizlemek istiyorsanız -

http url'yi ateşleyebilirsiniz -

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

( [core name]silmek istediğiniz çekirdeğin adıyla değiştirin ). Veya veri xml verilerini gönderiyorsanız bunu kullanın:

<delete><query>*:*</query></delete>

commit=trueDeğişiklikleri uygulamak için kullandığınızdan emin olun

Yine de hbase verilerini temizleme konusunda pek fikrim yok.


7
çok çekirdekli kurulum kullanıyorsanız çekirdek gereklidir.
Jayendra

1
Bu cevap hbase'deki tüm tabloların nasıl silineceğini tartışır: stackoverflow.com/questions/3990952/… . Sadece tablodaki verileri silmek istiyorsanız, onları düşürmek yerine kesebilirsiniz.
codingFoo

sadece dizini mi siliyor? yoksa gerçek verileri de silecek mi?
vishnu viswanath

6
&commit=trueSorguya ekleme yapmak isteyebilirsiniz, böylece Sorgu http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=trueOlmadan tüm belgelerin neden kaldırılmadığını merak ediyordum.
chris544

2
Çalışmıyor. Anlıyorum: HTTP ERROR 404 / solr / update'e erişim sorunu. Nedeni: Solr'dan Bulunamadı ...
Stepan Yakovenko

91

Bu isteği tüm kayıtlarımı silmek için kullandım ancak bazen bunu yapmak gerekiyor.

Bunun için &commit=trueisteğinize ekleyin :

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

11

Silmek için aşağıdaki komutları kullanabilirsiniz. Sorguya göre silme komutunda "tüm dokümanları eşleştir" sorgusunu kullanın:

'<delete><query>*:*</query></delete>

Ayrıca silme işlemini çalıştırdıktan sonra da işlemelisiniz, bu nedenle dizini boşaltmak için aşağıdaki iki komutu çalıştırın:

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'

Başka bir strateji, tarayıcınıza iki yer imi eklemektir:

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>
http://localhost:8983/solr/update?stream.body=<commit/>


SOLR'den kaynak dokümanlar:
https://wiki.apache.org/solr/FAQ#How_can_I_delete_all_documents_from_my_index.3F


10

Post json verileri (ör. Curl ile)

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

8

Solr'deki tüm verileri SolrJ aracılığıyla silmek istiyorsanız, buna benzer bir şey yapın.

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'deki tüm verileri silmek istiyorsanız, buna benzer bir şey yapın.

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

Sorguya göre silme komutunda "tüm dokümanları eşleştir" sorgusunu kullanın :

Ayrıca silme işlemini çalıştırdıktan sonra da işlemelisiniz, bu nedenle dizini boşaltmak için aşağıdaki iki komutu çalıştırın:

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'

URL'de <core>tanımlananla iyi çalıştı . Cevabı düzenledim.
Achala Dissanayake

4

Komut satırından şunları kullanın:

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

3

Buraya SolrNet kullanarak .Net çerçevesinden tüm belgeleri solr örneğinden silmek için geldim. İşte bunu nasıl yapabildim:

Startup.Init<MyEntity>("http://localhost:8081/solr");
ISolrOperations<MyEntity> solr =
    ServiceLocator.Current.GetInstance<ISolrOperations<MyEntity>>();
SolrQuery sq = new SolrQuery("*:*");
solr.Delete(sq);
solr.Commit();

Bu, tüm belgeleri temizledi. (Bunun kurtarılıp kurtarılamayacağından emin değilim, Solr'ı öğrenme ve test aşamasındayım, bu nedenle lütfen bu kodu kullanmadan önce yedeklemeyi düşünün)


Bu çok kullanışlıdır. Teşekkür ederim !
Karan

3

bunu tarayıcıda ateşle

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true bu komut, solr'deki dizindeki tüm belgeleri silecek


Lütfen cevabınızı düzenleyebilir ve gösterdiğiniz kodun ne yaptığını ve bu kodun soruyu neden / nasıl yanıtladığını açıklayabilirseniz, gerçekten yardımcı olabilir.
Lea Cohen

Yukarıdaki cevap şimdi tamam mı ..?
bittu

Kesinlikle daha anlaşılır :).
Lea Cohen

2

Bu sorguyu tüm kayıtlarımı silmek için kullandım.

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

2

Aşağıdaki adımları denedim. İyi çalışıyor.

  • Lütfen SOLR sunucusunun çalıştığından emin olun
  • SOLR indeksli tüm verilerinizi silecek ve silecek olan Tüm SOLR verilerini sil bağlantısına tıklamanız yeterlidir, ardından ekranda aşağıdaki ayrıntıları çıktı olarak alırsınız.

    <response>
      <lst name="responseHeader">
        <int name="status">0</int>
        <int name="QTime">494</int>
      </lst>
    </response>
    
  • Yukarıdaki çıktıyı alamıyorsanız, lütfen aşağıdakilerden emin olun.

    • Yukarıdaki bağlantıda varsayılan host(localhost) ve port(8080) kullandım. Sizin tarafınızdan farklıysa lütfen ana bilgisayarı ve bağlantı noktasını değiştirin.
    • Varsayılan çekirdek adı collection/ olmalıdır collection1. Kullandığım collection1yukarıdaki bağlantıda. çekirdek adınız farklıysa lütfen değiştirin.

1

Tüm verileri temizlemeniz gerekiyorsa, koleksiyonu yeniden oluşturmak daha hızlı olabilir, örn.

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

1

Her şeyden önce curl örnekleri, onları bir cygwin terminalinden çalıştırdığımda benim için başarısız oldu. Komut dosyası örneğini çalıştırdığımda buna benzer hatalar vardı.

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>

Silme işlemini bir projede hepsini silmek için çekirdek adlarda bir döngüde kullanmam gerekiyordu.

Aşağıdaki bu sorgu Cygwin terminal komut dosyasında benim için çalıştı.

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>

Bu tek satır verilerin kaybolmasına neden oldu ve değişiklik devam etti.



0

Solr Yönetici Arayüzüne silme bağlantısını ekleyen bir JavaScript yer işareti yaptım

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

görüntü açıklamasını buraya girin


0

Cloudera 5.x kullanıyorsanız, Bu dokümantasyonda Lily'nin Gerçek zamanlı güncellemeleri ve silmeleri de sürdürdüğünden bahsedilmektedir.

Lily HBase NRT Dizin Oluşturucu Hizmetini Cloudera Aramasıyla Kullanım için Yapılandırma

HBase, HBase tablo hücrelerine eklemeler, güncellemeler ve silmeler uygularken, indeksleyici, standart HBase replikasyonunu kullanarak Solr'ı HBase tablo içeriği ile tutarlı tutar.

truncate 'hTable'Aynı şekilde desteklenip desteklenmediğinden emin değilim .

Aksi takdirde, verilerinizi hem Solr hem de HBase'den belirli bir Olay veya herhangi bir şeyden temizlemek için bir Tetikleyici veya Hizmet oluşturursunuz.


0

Solr Emin değilim, ancak aşağıdaki gibi truncate komutunu kullanarak tüm verileri hbase'den silebilirsiniz:

truncate 'table_name'

Tüm satır anahtarlarını hbase tablosundan silecektir.


0

Bir Solr koleksiyonunun tüm belgelerini silmek için bu isteği kullanabilirsiniz:

curl -X POST -H 'Content-Type: application/json' --data-binary '{"delete":{"query":"*:*" }}' http://localhost:8983/solr/my_collection/update

JSON gövdesini kullanır.


Başkalarının da işaret ettiği gibi, kullanılması muhtemelen daha iyidir /update?commit=true. JSON istek gövdesinin kendisi harika çalışıyor :)
Frederick Zhang
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.