2011-08-13 4 views
1

Lucene을 사용하여 데이터베이스를 인덱싱 한 다음 특정 필드 (필드 이름 : 키워드)에서 구문 검색을 수행합니다. 현재 내가 사용하고 다음 코드를Lucene 동의어 확장, 형태소 분석, 맞춤법 검사 및 기타

 String userQuery = request.getParameter("query"); 
     //create standard analyzer object 
     analyzer = new StandardAnalyzer(Version.LUCENE_30); 
        Analyzer analyze=AnalyzerUtil.getPorterStemmerAnalyzer(analyzer); 
     //create File object of our index directory 
     File file = new File(LUCENE_INDEX_DIRECTORY); 
     //create index reader object 
     reader = IndexReader.open(FSDirectory.open(file),true); 
     //create index searcher object 
     searcher = new IndexSearcher(reader); 
     //create topscore document collector 
     collector = TopScoreDocCollector.create(1000, false); 
     //create query parser object 
     parser = new QueryParser(Version.LUCENE_30,"keyword", analyze); 
        parser.setAllowLeadingWildcard(true); 
     //parse the query and get reference to Query object 
     query = parser.parse(userQuery); 
     //********Line 1*********************** 
        //search the query 
     searcher.search(query, collector); 
     hits = collector.topDocs().scoreDocs; 
     //check whether the search returns any result 
     if(hits.length>0){//Code to retrieve hits} 

이 코드는 형태소 분석을 위해 잘 작동하지만 지금은 내가 "남자"입력 및 루씬의 색인이 항목을 "이있는 경우와 같은 동의어 검색을 수행 내 쿼리를 확장하려는 남성 "이라면, 그것은 나에게 그것을 히트로서 줄 수있을 것이다. 위 코드의 1 행에이 코드를 추가하려고 시도했습니다. query=SynExpand.expand(userQuery,
searcher, analyze,"keyword",serialVersionUID);
하지만 결과가 좋지 않습니다. 또한 "맞춤법 검사"기능을 도입하고 싶습니다. "믿을 수없는"대신 "ubelievable"을 입력하면 결과가 나옵니다.

동의어 확장이 나를 위해 작동하지 않는 이유와 맞춤법 검사 방법을 알지 못합니다. 누군가 나를 안내 할 수 있다면 정말 감사 할 것입니다.

감사합니다.

답변

3

퍼지 검색은 즉 추가 물결에 의해, 쿼리 키워드 수정 수행 할 수 있습니다 :

keyword:ubelievable~ 

당신에게 흥미로운 일이 될 수 있습니다 자세한 내용과 질의 다른 유형의 Lucene Parser Syntax를 참조하십시오.

동의어를 처리하는 두 가지 방법이 있습니다. 쿼리 확장WordNet에 의존하려고합니다. SynExpand의 설명서에 따르면 확장을 사용하려면 먼저 Syns2Index을 호출해야합니다. 이것은 쉬운 방법이지만 영어 단어에서만 작동합니다.

여러 언어에 대한 지원을 추가하거나 동의어를 추가해야하는 경우 색인 생성시 동의어 삽입 을 사용할 수 있습니다. 아이디어는 자신의 사전에서 동의어를 인덱싱 된 문서로 삽입하는 자체 분석기를 작성하는 것입니다. 이것은 구현하기가 힘들지 만, 다행스럽게도 Lucene in Action book (소스 코드는 무료입니다, lia.analysis.synonym 패키지 참조)에 훌륭한 예가 있습니다.하지만이 멋진 책의 사본을 얻으실 것을 적극 권장합니다.

+0

@ffriend이 추천 한 샘플 링크 http://subversion.assembla.com/svn/LuceneInAction/LuceneInAction/src/lia/analysis/synonym/ –