2013-03-20 1 views
0

때때로 전체 데이터베이스를 다시 색인합니다. 대개 몇 시간이 걸립니다. 그러나 최신 페이지 만 첫 페이지에 표시됩니다. 그래서 나는 데이터베이스를 거꾸로 다시 색인하면 'id desc'순서로 레코드를 다시 색인하면 서버 다운 시간을 많이 줄일 수 있다고 생각합니다.가장 최근의 레코드를 다시 색인 할 수 있습니까?

그러나 성능 측면에서 보면 괜찮습니까? 검색 시간에 부정적인 영향을 미칠 수 있습니까?

+0

전체 색인 생성 또는 델타 색인 생성을 수행하고 있습니까? –

+0

우리는 전체 다시 색인을 수행합니다 – lulalala

답변

1

왜 가동 중단 시간이 있습니까?

마지막 커밋 만하면 커밋을 할 때 끝 부분에만 레코드가 표시되며 순서는 중요하지 않습니다.

maxDocs/maxTime (Solr 4+) 세트를 사용하여 소프트 커밋을하고 최신 레코드에서 다시 색인하면 즉시 해당 레코드가 표시되고 다른 레코드는 결국 표시됩니다.

커밋 의미에 대해 조금 읽는 것이 좋을지를 확인하는 것이 좋습니다.

+0

다운 타임으로 나는 아무것도 표시 할 수 없을 때를 의미했습니다. 따라서 다시 색인을 생성 할 때 성능 문제가 발생하지 않는다고 말하는 것입니까? – lulalala

+0

언제 '아무것도'표시 되나요? 내가 당신의 시나리오를 이해한다면, 커밋 될 때까지 * 오래된 레코드를 표시하게 될 것입니다. '아무것도'아닙니다. 어쨌든 소프트 커밋을 철저히 검토하십시오. 그것은 당신의 필요에 매우 근접해야합니다. –

+0

만료 된 오래된 항목이 내 웹 사이트 논리의 색인 페이지에 숨겨져 있기 때문에 아무 것도 표시되지 않습니다. solf-commit은 중요하지 않으므로 주요 업데이트 중에 전체 색인 다시 생성이 수행됩니다. 나중에 쿼리에 성능상의 영향이 없을 것이라고 말하기 때문에 이것을 답으로 표시 할 것입니다. – lulalala

2

전체 색인을 다시 작성한다고 말하면서 다른 핵심 색인을 작성하고 교환하는 것이 좋습니다. This answer은 이러한 문제를 해결하는 방법에 대한 참고 자료를 제공합니다.

우리는 마스터/슬레이브 설정을 사용합니다. 여기서 인덱스는 마스터에서 발생하고 인덱스는 슬레이브로 복제됩니다. 슬레이브가 검색 요청을 처리합니다. 이것은 성능 관점에서 잘 작동합니다.

고려해야 할 또 다른 사항은 인덱싱 시간이 몇 시간으로 실행되는지 확인해보십시오. 이 경우 DataImportHandler의 중첩 된 쿼리가 n + 1 jdbc 연결을 시작하는 범인이라는 것을 깨달았습니다. 조회수를 최적화하여 색인 생성 시간을 3 시간에서 2 분 미만으로 단축했습니다.

+0

마스터/슬레이브가 실제로이를 처리하는 올바른 방법이지만, 현재 우리에게는 불가능합니다. – lulalala

+2

엄격하게 마스터/슬레이브가 필요하지 않습니다. 코어 스왑은 단일 인스턴스에서도 수행 될 수 있습니다. [문서] (http://wiki.apache.org/solr/CoreAdmin#SWAP)에서이 작업을 수행 할 수있는 명령을 제공합니다. –