2017-11-12 6 views
1
curl 'http://localhost/solr/collection/update?commit=true' 
-H 'Content-type:application/json' 
-d 
'[ 
    { 
    "id":"11111", 
    "price":{"set":1000} 
    } 
]' 

id : 11111이 있으면 가격 값이 업데이트됩니다. 괜찮습니다.solr이 (가) 업데이트하는 동안 새 문서를 추가하는 이유는 무엇입니까?

id : 11111이없는 경우 solr 인덱스에 새 문서가 만들어집니다. 이 동작은 바람직하지 않습니다. 일부 텍스트에서 다음과 같은 오류가 예상됩니다. 업데이트하려는 문서가 존재하지 않습니다. 무엇이 잘못되었는지 이해할 수 없습니다.

Solr 버전 : 4.8.0. 의 schema.xml의

부 : 원자 업데이트의 현재 구현이 작동하는 것 같다 어떻게

<field name="id" type="string" indexed="true" stored="true" required="true"/> 
<uniqueKey>id</uniqueKey> 
+0

의견이 있으십니까? 왜 예상 된 동작을하지 못하는지 그리고 solr이 '업데이트하는 동안 새 문서를 추가하는 이유는 무엇입니까? – EricLavault

+0

귀하의 답변에서 저를 조언 해 주신 것처럼 워크 플로를 수정하기로 결정했습니다. 왜이 동작이 기본값인지 궁금합니다. 왜 안심하지? – Dimitry

+0

이것은/update 핸들러 함수가 인덱스를 전체적으로 업데이트한다는 점에서 안심할 수 있습니다. API는 add/replace, delete, commit, optimize 등과 같은 연산을 제공합니다. 여러 가지 작업을 수행 할 수있는 가능성이 있습니다 (add, delete & commitWithin)를 한 번에 처리 할 수 ​​있습니다. – EricLavault

답변

0

요청 처리기는 실제로 새 문서와 기존 문서의 색인을 업데이트하고 삭제를 처리합니다. 연동제 동안

: 해당 ID가 인덱스 문서 일치하지 않는 경우

  • 문서

    가 더 식별자가없는 경우 새로운 생각이나된다. 인덱싱 중에 ID가 생성되지 않고 uniqueKey 필드가 필요한 경우 문서가 거부됩니다.
  • 인덱싱 된 문서와 일치하는 식별자가있는 문서가 저장된 버전과 병합됩니다. 저장된 모든 필드가 인덱스에서로드되고 요청 매개 변수의 필드 값에 의해 재정의되고 결과 문서가 이전 문서를 대체합니다 (결국 그것은 같은 작업 임). 다른 단어 업데이트 요청에

-하지 않는 을 삭제하는 경우는 - 항상 작업을 추가하는 것과 동일한 에 끝납니다. 그런데 solr.UpdateRequestHandler으로 인식되는 XML 스키마는 추가 (add) 또는 대체 (replace)와 관계없이 <add>, <doc><field> 요소를 포함합니다.

최근 버전의 Solr은 문서의 일부를 업데이트하는 데 더 많은 옵션을 제공합니다. (atomic updatesin-place updates를 참조하십시오.

을 당신이 설명하는 것은. 예상 된 동작입니다 id 필드가 필요하기 때문에, SOLR이 필드 누락 문서에 오류가 발생합니다. 귀하의 상황에서, 문서는 두 경우 모두에 색인 된 ID 때문에

이 구성을 사용하면 새 문서를 고려할 때 클라이언트 쪽 또는 업데이트 프로세서를 사용하여 서버 쪽을 요청하거나 요청을 업데이트하여 id 필드를 비워야합니다 핸들러 구현. 새 문서의 색인 생성을 막는 것이 더 간단 할까?

0

. 동의를 얻는 것이 바람직 할 수도 있습니다. 사용자 메일 링리스트에서 문제를 제기하고 커미터가 생각하는 것을보아야합니다. 오류가 제기되어야한다는 점에 동의 할 수도 있습니다. jira.

아, 그냥 오래된 버전 인 4.8 버전을 확인했는데 현재 버전의 동작을 테스트 할 수 있습니까?

+0

아니요, 여전히 동일한 api입니다. 불행한 점은이 핸들러를 업데이트 핸들러라고하며, 반면에 createORupdateANDdelete 핸들러를 의미합니다. – Mysterion