2012-09-27 2 views
3

다음 상황을 고려하십시오. 작가와 서적을 두 개의 테이블에 저장하는 데이터베이스가 있습니다. 한 권의 책은 분명히 책을 쓴 작가에 대한 참고서를 저장합니다. Solr에게는 모든 책에 연관된 작가의 세부 정보가 들어있는 하나의 큰 문서로이 구조를 비정규 화해야합니다. 이 색인은 이제 책을 질의하는 데 사용됩니다.참조 데이터의 Solr 역 정규화 및 업데이트

시스템 사용자 한 명이 이제 시스템의 기록기 레코드를 업데이트하기로 결정했습니다. 많은 책이 그것과 연관 될 수 있기 때문에이 작가 기록의 데이터를 포함하고있는 Solr의 모든 문서를 업데이트해야합니다. 내가 아는 한 모든 영향을받는 문서를 삭제하고 다시 추가해야하기 때문에 이것은 매우 고통 스럽습니다.

더 좋은 방법이 있습니까? 참조 된 데이터 중 하나가 수정되면 시스템의 인덱스를 거의 실시간으로 업데이트해야합니다.

답변

2

이것은 중첩 된 문서를위한 완벽한 유스 케이스가 될 것입니다. 내가 아는 한 lucene은 중첩 된 문서를 지원하지만 Solr은이 기능의 현재 상태를 완전히 확신하지는 않습니다.

이 기능은 elasticsearch에서 사용할 수 있습니다. 당신은 그것을보고 싶을 수도 있습니다, 당신이 내 생각에 what's so cool about elasticsearch을 알고 싶다면 흥미로운 수있는 기사가 있습니다. 귀하의 질문은 방금 내 기사에서 중첩 된 문서 기능을 언급하지 않았 음을 상기시켜주었습니다. 매핑에 nested type을 사용할 수 있습니다. 더 알고 싶다면 this 기사를보실 수 있습니다. 그런데 그것은 정확하게 책/작가 예제를 포함합니다.

Elasticsearch도 도움이됩니다. updating documents. 전체 문서를 다시 색인 할 필요는 없지만 스크립트를 통해 변경 사항 만 전송하십시오. 인덱싱 된 source 문서를 내부적으로 검색하여 저장하고 스크립트를 실행하여 업데이트하고 다시 색인화합니다. 루신은 인덱스 세그먼트가 1 회성 쓰기 이후 내부적으로 작동하는 방식입니다. 곧 출시 될 Solr 4를 사용하면 변경 내용 만 제공하는 update 문서를 작성할 수 있지만 모든 필드가 저장되어있는 경우에만 작동한다는 것을 알고 있습니다. 저장되지 않은 필드는 색인에서 검색 할 수 없습니다.

근시 업데이트에 대해 언급하는 경우 elasticsearch는 Lucene 니어 리얼 타임 API를 사용하고 매초마다 인덱스 리더를 자동으로 새로 고칩니다. Solr 3은 아직 그 API를 사용하지 않지만 Solr 4는 사용합니다.

+0

감사합니다. 나중에 블로그 게시물을 읽습니다. 중첩 된 문서는 내가 필요한 것을 알지 못하는 것처럼 보입니다. 그러나 여전히 중첩 된 문서 업데이트 프로세스의 속도를 어떻게 알 수 없습니다. 좀 더 조사해야합니다. – NagyI

+0

목표는 작성자를 한 번만 색인화하고 실제로 책을 포함하지 않고 책을 가리키는 것입니다. 이렇게하면 각 저자를 한 번만 업데이트 할 수 있습니다. – javanna

+0

감사합니다. 유망 해 보입니다. 나는 조종사를 위해 ES를 투옥 할 것이다 :) – NagyI