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 인덱스를 정리하려면-
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 데이터를 지우는 데는 많은 생각이 없습니다.
&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
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);
}
}
쿼리 별 삭제 명령에서 "모든 문서 일치"쿼리를 사용하십시오 .
또한 삭제를 실행 한 후 커밋해야하므로 인덱스를 비우려면 다음 두 명령을 실행하십시오.
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>'
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의 학습 및 테스트 단계에 있으므로이 코드를 사용하기 전에 백업을 고려하십시오.)
아래 단계를 시도했습니다. 잘 작동한다.
모든 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
위의 링크에서 사용 했습니다. 핵심 이름이 다른 경우에도 변경하십시오.위의 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>
이 한 줄로 인해 데이터가 사라지고 변경 사항이 지속되었습니다.
Solr 인덱스를 지울 때 모두 삭제 쿼리를 실행 한 후 커밋을 수행하고 최적화해야합니다. 필요한 전체 단계 (컬만 있으면 됨) : http://www.alphadevx.com/a/365-Clearing-a-Solr-search-index
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>');
})();
Cloudera 5.x를 사용하는 경우이 문서에서 Lily가 실시간 업데이트 및 삭제도 유지한다고 언급되어 있습니다.
Cloudera Search와 함께 사용할 Lily HBase NRT 인덱서 서비스 구성
HBase가 HBase 테이블 셀에 삽입, 업데이트 및 삭제를 적용 할 때 인덱서는 표준 HBase 복제를 사용하여 Solr이 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 요청 본문 자체가 훌륭하게 작동합니다. :)