2013-05-24 2 views
2

특정 Solr 응용 프로그램의 경우 중복 된 결과를 삭제해야합니다.고유 키가 같은 중복 문서

<uniqueKey>id</uniqueKey> 

내가 기존 문서의 ID로 /update/json?commit=true를 호출 할 때, 현존하는 문서가 제대로 업데이트됩니다 나는 등의 schema.xml에서 고유 키와 같은 필드 id 세트가 있습니다. 그러나 /update/json?commit=true&overwrite=false을 호출하면 추가 문서가 동일한 ID로 추가됩니다! 기존 문서의 ID를 가진 문서를 폐기하도록 Solr을 어떻게 구성 할 수 있습니까? 나는 을 알아 차리고, Solr 4.x를 실행하는 새로운 코드에 소개하고 싶지 않습니다. 어쨌든 기본값은 false입니다. 따라서 어쨌든 속임수가 추가되는 이유는 알 수 없습니다.

<field name="id" type="string" stored="true" indexed="true" multiValued="false" required="true"/> 

명확하게하기 위해, 나는 업데이트하지 않고, 나는 새 문서를 만들려고하지 않습니다이 중요한 경우

id 필드 등으로 정의된다. 나는 을 버리고 새 문서를 버립니다.id 필드는 다른 여러 필드의 내용 해시로 계산됩니다. 그래서이 동일한 해시 (ID)가있는 다른 필드가 이미 존재하면 이 아니며은 업데이트해야합니다. (항상 같은 해시의 가장 오래된 문서를 유지해야합니다) 아니요 새 레코드를 만들고 싶습니다. 잘 속는 사람). 새 문서를 버리기 만하면됩니다.

INSERT IGNORE INTO SQL 문과 비슷한 동작을 찾고 있습니다.

답변

3

이 동작은 overwrite = false를 사용했기 때문에 발생합니다. 당신은 당신이보고있는 행동을 명시 적으로 요구하고 있습니다.

는 여기에 설명되어 있습니다 : https://cwiki.apache.org/confluence/display/solr/Uploading+Data+with+Index+Handlers#UploadingDatawithIndexHandlers-JSONFormattedIndexUpdates

덮어 쓰기가 "true"로하는 경우

그래서, 있는지 확인 "고유 키 제약 조건이 동일한 문서의 이전 버전을 덮어 확인해야합니다 여부를 나타냅니다" 기존 문서가있는 경우 기존 문서를 덮어 쓰고 삭제합니다. 덮어 쓰기가 거짓 인 경우 확인하지 않고이 문서가 고유하다고 가정하고 새 문서를 추가하기 만하면됩니다.

매개 변수의 이름이 "overwriteCheck"인 경우 실제로는 그 것이므로 명확 해집니다.

+0

감사합니다. 나는 내 의도가 분명하지 않다는 의문을 다시 읽는다. 필자는이 질문을 다음과 같이 편집했다 : 새 문서가 'INSERT IGNORE INTO'와 비슷한 속임수라면 _discarded_해야한다. – dotancohen

관련 문제