>source

kubernetes에서 solr 클러스터를 실행하고 있으며 조직에서 solr이 문서를 자동으로 배포하지 않고 자체 샤드를 관리합니다. 따라서 우리는 DistributedUpdateProcessorFactory 를 교체했습니다   NoOpDistributingUpdateProcessorFactory 와 함께   solrconfig.xml 에서 . 내 응용 프로그램 코드에서 발생하지만 쉘에서 간단한 컬을 사용하여 동작을 재현 할 수 있습니다.

# send an update to a document in shard 0 that adds a value to each field
curl -X POST --header "Content-Type:application/json" --data "[{'id': 'my_doc_id', 'my_field1': {add: ['foo']}, 'my_field2': {add: ['bar']}]" "http://solr-0.solr-headless.default.svc.cluster.local:8983/solr/my_collection/update?commit=false"
# commit the update to the shard (along with updates to other docs I might have sent)
curl -X GET "http://solr-0.solr-headless.default.svc.cluster.local:8983/solr/my_collection/update?commit=true"

my_field1  그리고 my_field2  둘 다 다중 값 문자열 필드입니다 (기본적으로 처리중인 일부 데이터에서 가져 오는 문자열 목록을 저장하고 싶습니다).

Solr이 제공하는 응답은 다음과 같습니다.

{
  "responseHeader":{
    "status":400,
    "QTime":3},
  "error":{
    "metadata":[
      "error-class","org.apache.solr.common.SolrException",
      "root-error-class","org.apache.solr.common.SolrException"],
    "msg":"RunUpdateProcessor has received an AddUpdateCommand containing a document that appears to still contain Atomic document update operations, most likely because DistributedUpdateProcessorFactory was explicitly disabled from this updateRequestProcessorChain",
    "code":400}}

따라서 제 질문은 분산 업데이트 프로세서없이 원자 업데이트가 금지 된 이유이며,이 문제를 해결하고 개별 샤드에 원자 업데이트를 명시 적으로 보내는 방법이 있습니까?

  • 답변 # 1

    원자 업데이트는 먼저 문서를 읽고 필드를 변경 한 다음 문서를 다시 색인화해야하므로 RunUpdateProcessor는 업데이트/추가 명령이없는 상태에서 이미 변경된 문서 만 수신합니다.

    이 변환은 DistributedUpdateProcessorFactory 의 책임입니다. 일반 설정에서는 문서가 포함 된 노드에서 문서를 검색하고 업데이트를 적용한 다음 RunUpdateProcessor 에 제출해야하므로 .

    _version_ 와 함께 낙관적 동시성 기능을 사용하여이 기능을 직접 구현할 수 있습니다. 또는 DistributedUpdateProcessorFactory 에 대한 사용자 정의 대체품을 작성하십시오.  업데이트 요청을 인덱스에서 가져 와서 해결합니다.

    오래된 위키에서 DistributedUpdateProcessor 는  단일 코어 인스턴스에는 아무런 문제가 없지만 더 이상 그렇지 않습니다.

    그러나 클러스터 설정없이 실행중인 경우 DistributedUpdateProcessorFactory는 배포와 관련하여 아무 것도하지 않습니다. 즉 Solr 인스턴스를 독립형으로 구성한 경우에는 제대로 작동합니다. 업데이트 프로세서 문제가 아닌 아키텍처 문제 + 솔라 구성 일 수 있습니다.

  • 이전 java - 동일한 데이터 일 때 업데이트를위한 Orace Row Lock
  • 다음 azureservicebus - azure service bus premium - 지리 복구 :삭제 된 메시지