블로그 이미지
lahuman

Notice

Recent Post

Recent Comment

Recent Trackback

Archive

04-27 00:20

calendar

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
  • total
  • today
  • yesterday

'Lucene'에 해당되는 글 2건

  1. 2008.11.25 lucene으로 한글 한글자 검색... ^^;
2008. 11. 25. 11:39 프로그래밍/lucene

lucene 검색 엔진으로 한글의 한글자 검색을 하면 검색 결과가 제대로 안나오는 경향이 있다.

'햅쌀', '보리쌀', '쌀밥', '유기농 쌀' 등등의 단어들이 있을때
'쌀'로 검색을 하면 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


posted by 알 수 없는 사용자