solr 및 hbase에서 모든 데이터를 삭제하는 방법


답변:


190

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 데이터를 지우는 데는 많은 생각이 없습니다.


7
멀티 코어 설정을 사용하는 경우 core가 필요합니다.
Jayendra

1
이 답변은 hbase : stackoverflow.com/questions/3990952/…의 모든 테이블을 삭제하는 방법에 대해 설명합니다 . 테이블의 데이터 만 삭제하려는 경우 삭제하는 대신 잘라낼 수 있습니다.
codingFoo 2011

인덱스 만 삭제합니까? 아니면 실제 데이터도 삭제합니까?
vishnu viswanath 2015 년

6
&commit=true쿼리 에 추가 하여 그것이 http://host:port/solr/core/update?stream.body=<delete><query>*:*</query></delete>&commit=true없으면 모든 문서가 제거되지 않은 이유가 궁금합니다.
chris544

2
작동하지 않습니다. 나는 얻는다 : HTTP ERROR 404 Problem accessing / solr / update. 이유는 ... SOLR에서 찾을 수 없음
스테판 Yakovenko 보낸 사람을

91

이 요청을 사용하여 모든 레코드를 삭제했지만 때로는이를 커밋해야합니다.

이를 &commit=true위해 요청에 추가 하십시오.

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

11

다음 명령을 사용하여 삭제할 수 있습니다. 쿼리 별 삭제 명령에서 "모든 문서 일치"쿼리를 사용합니다.

'<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


10

json 데이터 게시 (예 : curl 사용)

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

8

SolrJ를 통해 Solr의 모든 데이터를 삭제하려면 다음과 같이하십시오.

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

4

쿼리 별 삭제 명령에서 "모든 문서 일치"쿼리를 사용하십시오 .

또한 삭제를 실행 한 후 커밋해야하므로 인덱스를 비우려면 다음 두 명령을 실행하십시오.

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에 정의 된대로 잘 작동했습니다 . 나는 대답을 편집했다.
Achala Dissanayake


3

SolrNet을 사용하여 .Net 프레임 워크를 통해 solr 인스턴스에서 모든 문서를 삭제하려고 여기에 왔습니다. 내가 할 수 있었던 방법은 다음과 같습니다.

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의 학습 및 테스트 단계에 있으므로이 코드를 사용하기 전에 백업을 고려하십시오.)


이것은 매우 유용합니다. 감사합니다 !
Karan

3

브라우저에서 실행

http://localhost:8983/solr/update?stream.body=<delete><query>*:*</query></delete>&commit=true 이 명령은 solr의 색인에있는 모든 문서를 삭제합니다.


답변을 수정하고 표시하는 코드의 기능과 해당 코드가 질문에 답변하는 이유 / 방법을 설명해 주시면 정말 도움이 될 것입니다.
Lea Cohen

위의 대답은 이제 괜찮습니까 ..?
bittu

확실히 더 많이 이해됩니다 :).
Lea Cohen

2

이 쿼리를 사용하여 모든 레코드를 삭제했습니다.

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

2

아래 단계를 시도했습니다. 잘 작동한다.

  • 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위의 링크에서 사용 했습니다. 핵심 이름이 다른 경우에도 변경하십시오.

1

모든 데이터를 정리해야하는 경우 컬렉션을 다시 만드는 것이 더 빠를 수 있습니다.

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

1

위의 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>

이 한 줄로 인해 데이터가 사라지고 변경 사항이 지속되었습니다.


1

Solr 잘 모르겠지만 아래와 같이 truncate 명령을 사용하여 hbase에서 모든 데이터를 삭제할 수 있습니다.

truncate 'table_name'

hbase 테이블에서 모든 행 키를 삭제합니다.



0

Solr Admin UI에 삭제 링크를 추가하는 JavaScript 북마크를 만들었습니다.

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

여기에 이미지 설명 입력


0

Cloudera 5.x를 사용하는 경우이 문서에서 Lily가 실시간 업데이트 및 삭제도 유지한다고 언급되어 있습니다.

Cloudera Search와 함께 사용할 Lily HBase NRT 인덱서 서비스 구성

HBase가 HBase 테이블 셀에 삽입, 업데이트 및 삭제를 적용 할 때 인덱서는 표준 HBase 복제를 사용하여 Solr이 HBase 테이블 내용과 일치하도록 유지합니다.

truncate 'hTable'동일하게 지원 되는지 확실하지 않습니다 .

그렇지 않으면 트리거 또는 서비스를 생성하여 특정 이벤트 또는 기타 항목에 대해 Solr 및 HBase 모두에서 데이터를 정리합니다.


0

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 요청 본문 자체가 훌륭하게 작동합니다. :)
Frederick Zhang
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.