문제

우리는 3,600 만 문서 (각각 ~ 1k-2k)가 포함 된 Solr 지수를 설정했으며 단일 간단한 키워드와 일치하는 최대 100 개의 문서를 쿼리하려고합니다. 이것은 우리가 기대했던 것처럼 매우 빠르게 작동합니다. 그러나 이제 쿼리에 "& sort = createate+desc"를 추가하면 (따라서 쿼리와 일치하는 상위 100 개의 새 '문서를 요구) 오랫동안 오랫동안 실행되며 결국 OutofMemoryException을 초래합니다. 내가 매뉴얼에서 이해 한 것에서 이것은 Lucene이 쿼리를 실행하기 전에이 필드 (생성)의 모든 뚜렷한 값을 메모리 (FieldCache Afaik)에로드해야한다는 사실로 인해 발생합니다. 생성물 필드에는 날짜와 시간이 포함되어 있으므로 별개의 값의 수는 상당히 큽니다. 또한 언급해야 할 것은 인덱스를 자주 업데이트한다는 것입니다.

아마도 누군가가 Lucene / Solr 조정 방법에 대한 통찰력과 지시를 제공하거나 쿼리 시간이 허용되는 방식으로 접근 방식을 변경할 수 있습니까? 귀하의 의견은 대단히 감사하겠습니다! 감사.

도움이 되었습니까?

해결책

문제는 루센 숫자를 줄로 저장하는 것입니다. 날짜를 Yyyy, MM, DD로 나누고 다른 분야에 넣는 일부 유틸리티가 있습니다. 그것은 훨씬 더 나은 결과를 제공합니다.

최신 버전의 Lucene (2.9 이후) 지원 숫자 필드를 지원하고 성능 개선은 중요합니다 (몇 배, IIRC). 이것 숫자 쿼리에 대한 기사.

다른 팁

당신은 할 수 있습니다 인덱스 순서로 결과를 정렬하십시오 대신에. 문서 번호로 내림차순에 대한 정렬 사양은 다음과 같습니다.

new SortField(null, SortField.DOC, true)

또한 날짜 필드별로 인덱스 디렉토리를 분할해야합니다. 모든 일치하는 문서는 최상위 N 결과를 수집 할 때 Lucene이 검사합니다. 파티셔닝은 시험 된 세트를 분할합니다. 최신 파티션에 n 결과가있는 경우 이전 파티션을 검사 할 필요가 없습니다.

날짜 유형 데이터를 문자열 유형 (예 : 밀리 초)로 변환 해보십시오.

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