본문 바로가기

Lucene

[Lucene] Numeric 필드의 사용과 주의점

빠른 정렬을 위해서 Number의 값을 갖는 필드에 대해서 Numeric 필드를 사용하도록 이번에 로그 분석 프로그램을 개발하면서수정하였다. 아.. 근데 이걸로 이렇게 시간을 끌줄이야...ㅠㅠ 루씬은 String만으로도 색인이 가능하지만 숫자 필드에 대해서는 특별한 필드 타입을 지원하는데 그것이 바로 NumericField 필드이다. NumericField의 사용
위와 같은 방식으로 일반적인 필드 생성과는 조금 다른 방식으로 작동을 하게 된다. 위와 같이 필드를 설정하면 아래와 같은 쿼리식이 가능하다. 주의 할 점은 색인 할 때 사용한 Numberic 필드의 타입과 RangeQuery에 셋팅되는 타입이 같아야 한다. NumericField의 구간 검색 쿼리 생성 다만 주의 할 점은 필드에 들어가는 값의 타입이 일정해야 한다는 것.. 색인 시점에는 null, "", 2.5 , 100 등의 값이 모두 색인이 될 수 있지만 저것을 NumericField로써 정렬을 하게 되면 루씬의 FieldCache쪽에서 해당 타입에 맞게 값을 컨트롤 하는 과정에서 에러가 발생하게 된다. 위 예제에서 굳이 저 시점에서 parseLong을 해주는 이유는  Long 타입으로 변형되지 못 하는 것들을 걸러버리기 위함이다. 예전에 초기 모델 개발시 하나의 필드에 여러 의미의 값을 색인하여 필드의 수를 줄였던 것을 별 생각없이 같은 방식으로 개발하려다가.. 성능 향상을 위해 NumericField를 적용하던 것이 저 문제랑 맞부딫혀서.. 며칠을 고생했네..;;; 색인 파일의 용량이 14G를 넘어가다보니.. full 탐색도 안되고..