2015-02-05 1 views
0

내 SOLR 컬렉션에 임시로 중복되는 문서에 문제가있어 사용자 순위 시스템이 올바르지 않습니다.Overwrite = True를 사용하는 동안 중복 된 SOLR 문서 문제가 발생했습니다.

SOLR 버전 4.8.1을 사용 중이므로 최신 빌드 중 하나입니다. 나는이 SOLR Documentation에 설명 된 것처럼 SOLR 모음을 업데이트 XML을 사용하고 있습니다 : 위의 코드에서 볼 수 있듯이, 내가 덮어 쓰기 매개 변수를 사용하고

<add overwrite="true" commitWithin="#COMMIT_WITHIN.GLOBAL_VALUE#"> 
 
    <doc> 
 
    <field name="END_USER_ID">#END_USER_ID#</field> 
 
    <field name="TARGET_REGION_ID">#TARGET_REGION_ID#</field> 
 
    <field name="POPULARITY_RANK">#POPULARITY_RANK#</field> 
 
    <field name="VISIBILITY_SCORE">#VISIBILITY_SCORE#</field> 
 
    <field name="POPULARITY_VISIBILITY_SCORES_ID">#POPULARITY_VISIBILITY_SCORES_ID#</field> 
 
    <cfif #POP_VIS_SCORES_LAST_MODIFIED_DATETIME# NEQ ""> 
 
     <field name="POPULARITY_VISIBILITY_SCORES_DATE_MODIFIED">#POP_VIS_SCORES_LAST_MODIFIED_DATETIME#</field> 
 
    </cfif> 
 
    </doc> 
 
</add>

은 (가지고 새로운 문서는 이전에 교체 동일한 시간 간격으로 문서를 추가하기 위해 commitWithin 매개 변수와 함께 동일한 uniqueKey를 가진 문서를 추가했습니다. 이 경우 고유 키는 END_USER_ID 여야하고 기간은 15 초 여야합니다. uniqueKey가 적절한 schema.xml 파일에 정의되어 있고 multiValued가 END_USER_ID에 대해 false로 설정되어 있는지 확인했습니다.

그래서 내 순위 페이지에는 로컬 SOLR 서버에 대한 호출이 몇 가지 있습니다. 예를 들면 다음과 같습니다 commitWithin은 15000 밀리 초 단위로 설정되어 내 관찰에서

http://localhost:8983/solr/pop_vis_scores/select/?q=TARGET_REGION_ID:50%20AND%20-POPULARITY_RANK:0&version=4.8&start=0&rows=1&indent=off&stats=true&stats.field=POPULARITY_RANK&sort=POPULARITY_RANK%20ASC&fl=[docid],END_USER_ID,POPULARITY_RANK&timeAllowed=8000

은 업데이트 된 SOLR 문서는 즉시 사용할 수 있지만 중복 SOLR 문서는 그 이전 데이터를 반영 존재한다. commitWithin이 500 밀리 초로 설정되면 문제가없는 것으로 보입니다. 그런데 문제는 여전히 존재한다고 이론화 하겠지만 사용자는 중복 된 문서를 볼 정도로 충분히 빠르게 행동 할 수 없습니다. 수천 명의 사용자가이 게임을 할 때 나는이 문제가 실제로 더 큰 규모로 존재할 수 있다고 이론화합니다. 또한, 게임의 플레이어 기반이 증가 할 때 15 초로 다시 commitWithin을 설정하는 것이 좋습니다.

누구나 전에 비슷한 문제에 직면 해 있습니다. 그렇다면 어떻게 해결할 것입니까? 누구에게 추천이 있니? 미리 감사드립니다!

답변

0

SOLR 문서가 주어진 15 초 시간 내에 컬렉션에 추가되면 새 문서가 컬렉션에 삽입 될 때 기존 문서도 동시에 삭제된다는 가정을했습니다. 이 가정은 틀린 것으로 보인다. 순위에 올 때 더 정확한 통계 값을 얻기 위해 사용자 ID를 쿼리에서 제외 할 수있었습니다. 비슷한 상황을 경험 한 사람이라면 SOLR 문서가 동시에 삭제되고 업데이트 될 것이라고 가정하지 않는 것이 좋습니다.