'햅쌀', '보리쌀', '쌀밥', '유기농 쌀' 등등의 단어들이 있을때
'쌀'로 검색을 하면 DBMS의 LIKE '%쌀%' 처럼 검색을 할 수는 없을까??
음.. 와일드 카드 검색이 있군.. 검색 Query에 '*쌀*'로 설정 후 테스트~
삑~~ ParserException ... 음..
와일드 카드 검색의 첫번째 문자로는 '*', '?'를 쓰지 못한다고 블로그 들을 검색해 보니 나온다.. ㅡㅡ;
음.. 할 수 있는 방법은 없을까...
일단 해당 소스를 까보자~~
분명 Exception을 발생 시키는 부분을 찾아가 보면 될꺼야~~ !
음.. 찾았구나~
QueryParser 클래스의 getWildcardQuery() 메소드군..
소스를 보니 주석에 적혀있네.. ^^;
but is not a prefix term token..
하지만 난 쫌 써야 겠는데..
수정 고고~
ParserException 을 발생 시키는 부분을 주석처리~
// if (!allowLeadingWildcard && (termStr.startsWith("*") || termStr.startsWith("?"))) {
// throw new ParseException("'*' or '?' not allowed as first character in WildcardQuery");
// }
컴파일 후 jar로 묶기~~ 적용~~ 와우 되는군..
근데 생각해 보니 영어가 한글자 들어오면 골치 아파질 것 같네.. ㅡㅡ;
그래서 검색어가 한글로 한글자 인지 체크 후 한글로 한글자 이면..
검색어의 앞뒤에 '*'를 붙여주자~ 고고~
한글인지 체크하는 메소드 생성하고..
public static boolean isHangle(String input) {
if( input == null ) {
return false;
}
if( input.length() == 1 ) {
char c = input.toCharArray()[0];
if( c >= '\uAC00' && c <= '\uD7A3' ) {
return true;
}
}
return false;
}
검색어 수정~
if( SearchUtil.isHangle(keyword) ) {
StringBuilder sb = new StringBuilder();
sb.append("*")
.append(keyword)
.append("*");
keyword = sb.toString();
}
음... 이런식으로..
'프로그래밍 > lucene' 카테고리의 다른 글
lucene 참고 사이트.. (0) | 2008.11.25 |
---|