2013-12-20 2 views
3

lucene을 기반으로하는 검색 프로젝트를 만들었습니다. 4.5.1약 1M 문서의 검색 성능이 느린 이유는 무엇입니까? 응용 프로그램을 확장하는 방법은 무엇입니까?

약 1 백만 개의 문서가 있으며 각각 약 몇 킬로바이트입니다. docname (저장 됨), 마지막 수정 된 내용의 필드로 색인을 생성합니다. 인덱스 폴더의 전체 크기는 약 1.7GB입니다.

하나의 문서 (원본 파일)를 샘플로 사용하여 인덱스에 대해 해당 문서의 내용을 쿼리합니다. 문제는 이제 각 쿼리 결과가 느리게 올라오고 있습니다. 몇 가지 테스트를 한 후에는 불용어를 제거했지만 쿼리가 너무 큽니다. 그러나 쿼리 문자열 크기를 줄이는 방법을 알지 못합니다. 또한 쿼리 문자열의 크기가 작을수록 결과의 정확도가 떨어집니다. 나는 또한 다른 원본 파일로 테스트하기 때문에

가 특정 파일에 한정되지 않고, 검색의 성능이 상대적으로 느린 (종종 1-8초) 또한

, 난에 전체 인덱스 디렉토리를 복사하는 것을 시도했다 RAMDirectory 검색 중에 도움이되지 않았습니다. 또한

, 난 단지 여러 스레드에서 하나의 인덱스 검색기을 가지고 있지만, 테스트, 난 단지 예상되는 응답 시간이 몇 밀리해야한다, 벤치 마크 하나 개의 스레드를 사용에서 검색 성능을 향상시킬 수있는 방법에

그래서

, 이 경우?

힌트 : 필드의 수는 좋은 솔루션은 다음 저장할 진 필드에 전체 개체를 직렬화하지이다 크면 내가 최고 1000

+1

[Lucene 성능] (http://stackoverflow.com/questions/824973/lucene-performance) 가능한 복제본 – alienCoder

+0

그 중 대부분은 시도했지만 그다지 도움이되지 않았습니다. lucene4는 다른 구문을 사용하는 것으로 보입니다. 지금 – ikel

+0

샘플 쿼리를 게시하고 설명을 실행할 수 있습니까? –

답변

0

을 찾고 있어요.

더하기는 쿼리 후 개체를 다시 투영 할 때 더 많지 않고 단일 필드입니다. getField(name)은 전체 집합을 반복하므로 O (n/2) 값을 가져 와서 필드를 설정합니다. 단지 하나의 필드와 deserialize.

초는 MoreLikeThis 검색어와 같은 값일 수 있습니다. https://stackoverflow.com/a/7657757/277700