2011-03-11 8 views
11

사용자가 문서를 만들 때 솔라 색인에 날짜를 추가합니다. 편집 또는 삭제와 같이 데이터가 변경 될 때마다 전체 데이터를 다시 색인해야합니까?solr 인덱스를 업데이트하는 방법은 무엇입니까?

이 경우 reindex는 무엇을 의미합니까? 내가

$this->indexData(array(
     'id' => $pid, 
     'title' => $data['titel'] 
)); 

각 문서에 대해 수행하고 $solr->addDocuments을 할 때, 그것은 단지 기존 데이터를 이미 덮어합니까?

전체 색인을 추가/삭제/편집 할 때 색인을 다시 만들려고했으나 특정 필드를 삭제 한 후에도 여전히 색인에있는 것처럼 보입니다.

아이디어가 있으십니까?

답변

23

문서를 solr로 색인화하면 보통 <uniqueKey/> 인 기존 문서를 덮어 씁니다. 보통은 id입니다. 예, 기존 데이터를 덮어 씁니다.

문서의 단일 필드를 변경하려는 경우 solr은 필드 업데이트 만 지원하므로 문서 전체를 다시 색인해야합니다. 따라서 필드를 삭제할 때 필드없이 문서의 색인을 다시 만들어야합니다. 이렇게하면 기존 데이터를 덮어 씁니다. 끝에 commit을 보내는 것을 잊지 마세요.

Solr 4를 사용하면 문서의 단일 필드를 업데이트 할 수 있습니다. 위의 Atomic_Updates

5

++를 참조하십시오. 이 같은 변화의 높은 볼륨이있는 경우

또한, 다음 잠재적 인 문제가있다 :

때 'UPDATE'SOLR의 문서 (Morja 말한대로)이이 '장소'갱신하지 않습니다 . 솔라가 문서에 대한 내부 룩업 테이블을 유지하고 문서를 업데이트 할 때 '업데이트 된'문서에 대한 포인터가 역 색인에서 히트 될 때 리다렉션 목록을 유지해야만합니다. 버전.

메모리가 충분하지만 결국 변경 사항을 추적하는 메모리를 사용할 때 결국 Solr이 조회를 다시 작성해야합니다. 이것은 (내 경험상) 예기치 못한 속도 저하와 원하지 않는 최적화를 유발합니다.

아마도 당신에게는 문제가 아니지만 그것은 나를위한 것이 었습니다. (시간당 1000 번 + 업데이트)

+1

그런 업데이트를 통해 한 사용자가 다른 사용자의 수정 사항을 덮어 쓰지 않도록하려면 어떻게해야합니까? – gregm

+0

어떻게 문제를 해결 했습니까? –

0

문제는 업데이트 후 문서를 삭제하고 삽입하는 것일 수 있지만 너무 자주 커밋하면 최적화가 트리거 될 수 있으므로주의해야합니다.

전체 데이터를 다시 인덱싱 할 필요는 없지만 전체 문서를 업데이트 된 문서로 다시 작성해야합니다.

관련 문제