Lucene 검색을 할 때,

특정 조건을 AND로 추가해서 Query할 수도 있고,
특정 조건을 Filter로 추가해서 Query할 수도 있다.

총 검색되는 갯수는 같지만, 간단하지만 보이지 않는 차이를 정리해 보면...
* AND로 검색을 하면 score에 해당 내용이 반영이 되어 정확도로 정렬할 경우 해당 내용이 반영된다.
* AND로 검색을 하면 별로도 추가로 검색을 하는 것이므로, 부하가 있는 쿼리의 경우는 AND조건 검색보다 Filter로 걸러내는 것이 속도가 빠르다. (검색된 것들 중에서 filtering을 하는 것이니 당연히 빠르겠죠? 전체 인덱스의 크기가 크면 클 수록 and query를 이용한 것 보다 훨씬 빠를테니까요.)

조금 더 자세히 몇 가지를 설명하자면...
Lucene in Action과 현재 licene 2.0 버젼이 filter 부분이 차이가 좀 있는데
DateFilter라는건 없어졌다.

그리고 내 경우는 기존에 사용하던 Filter도 있어서...
추가로 한가지 Filter를 추가한 case라서..

ChainedFilter에 두가지 filter를 추가해서 생성해서 사용했다.
참고 : http://lucene.apache.org/java/docs/api/index.html

Lucene에서는 numeric 범위 연산을 제공하지 않아, 숫자에 대해 범위 연산을 할 경우, 사용하는 자리수 많은 부족한 부분에 0을 채워줘야 한다.

간단하게 예를 들어 0~999까지의 숫자를 range검색하려면... 인덱싱할 때
1 -> 001
42 -> 042
999 -> 999

이렇게 인덱싱을 하고 검색할 때도 "032 TO 311" 이렇게 검색해 줘야만 제대로 검색이 가능하다.
그러므로 속도가 많이 느리다.

아래 출처에 보면, 음수를 포함하는 범위 검색을 하는 방법도 나와 있으니 필요한 분은 참고 하시길...

출처 : http://wiki.apache.org/jakarta-lucene/SearchNumericalFields

출처의 내용은 첨부 파일로 올려 놓는다.


SearchNumericalFields - Jakarta-lucene Wiki.mht



+ Recent posts