해야 하는 인덱스에 최적화되어 있으며 후에 증가는 인덱스에서 루씬?

StackOverflow https://stackoverflow.com/questions/119994

  •  02-07-2019
  •  | 
  •  

문제

우리는 전체 실시 인덱스의 모든 7 일(i.e을 만드 인덱스로부터)에서 우리의 루씬 지수 및 증대 인덱스는 2 시간마다 또는 이렇게.우리의 지수가 주변 700,000 문서를 전체 인덱스 약 17 시간(문제가 되지 않습니다).

우리가 할 때 증가 색인,우리는 인덱스는 콘텐츠는 변화는 과거에 두 시간,그래서 그것은 훨씬 적은 시간-주위에 반 시간입니다.그러나 우리는 눈치 챘는 많은 이 시간(10 분)가 보낸 실행 IndexWriter.최적화()메소드가 있습니다.

LuceneFAQ 언급:

이 IndexWriter 클래스가 지원하는 최적화()메소드는 콤팩트 인덱스는 데이터베이스 및 속도를 쿼리를 처리합니다.할 수 있 이 방법을 사용하여 수행한 후 전체의 색인을 생성 문서 설정 또는 후에 증분 업데이트 인덱스입니다.하는 경우 증분 업데이트가 추가 문서는 자주 수행할 최적화에서 한 번만 잠을 피하는 추가의 오버헤드 최적화입니다.

하지만...이것을 보이지 않는 어떤 정의를 위한 것"자주하는"의미합니다.을 최적화하는 것은 CPU 집중적이고 매우 IO-intensive,그래서 우리는 오히려하지 않을 경우 그것을 우리는 멀리 얻을 수 있습니다.얼마의 히트에서 쿼리를 실행하는 최적화되지 않은 인덱스(나는 생각하고 특히 관점에서의 쿼리 성능이 전체 후 다시 지수 비교하여 후 20 증 인덱스,말,50,000 문서 변경)?우리는 최적화 후 모든 증가 또는 인덱스는 성과중지 않은 가치가 있나요?

도움이 되었습니까?

해결책

매트 때문에,당신은 것은 좋은 생각이 얼마나 현재 프로세스,나는 당신이 제거 optimize() 과를 측정한 영향을 미친다.

많은 문서의 변화에서 2 시간 windows?는 경우 작은 부분만(50,000/700,000 은 약 7%)은 점진적으로 다시 인덱싱,나는 당신이 생각하지 않은 점점 많은 값 optimize().

몇 가지 아이디어:

  • 를 하지 않는 증분 optimize() 다.내 경험을 보지 않는 거대한 쿼리를 개선을 어쨌든.
  • optimize() 매일 대신에 2-시간별.
  • optimize() 중 낮은 볼륨 시간(는 무엇인 javadoc 말).

고 있는지 확인할을 측정합니다.이러한 종류의 변경될 수 있습에서 빠질 수 없게 되었습니다.

다른 팁

optimize 작업에 읽기 및 쓰기를 전체 인덱스는 왜 그렇게 IO 집중!

아이디어 뒤에 최적화하는 작업을 다시 모두 결합하는 다양한 세그먼트에는 루씬 지수의 하나로 세그먼트는 크게 줄일 수 있습니다 쿼리 시간으로 당신이 있지 않을 열고 검색 여러 파일당 쿼리가 있습니다.당신이 사용하는 경우 정상적인 루씬 파일 인덱스 구조(보다는 결합 구조),당신은 새로운 세그먼트별 commit 가동;로 다시 인덱스 I assume?

나는 생각한 Matt 한 조언과 나는 두번째 모든 것을 그가 말하는 수에 의해 구동된 데이터를니다.나는 것이 실제로 추가 단계만 최적화 a)할 때 필요하고 b)이 낮은 경우 쿼리량입니다.

으로 쿼리 성능이 밀접하게 묶여하 세그먼트의 수에 당신의 색인,간단한 ls -1 index/segments_* | count 이 될 수 있는 유용한 지표에 대한 때에 최적화는 정말 필요합니다.

또는,추적하는 쿼리 성능 및 볼륨 및를 시작할 때 최적화에 도달 할 수없는 낮은 성능으로 용인 가능한 수준으로 낮은 볼륨이 될 것이 더 좋은 솔루션입니다.

이메일,Otis Gospodnetic 조언 사용 최적화하는 경우,귀하의 지수입을 보고 지속적인 업데이트.그것은 2007 년부터,하지만 전화 optimize() 그것의 아주 자연 IO-무거운 작업입니다.고려할 수 있었을 사용하여 더 많은 단계적 접근 방법;a MergeScheduler

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top