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,
하지만 결과가 좋지 않습니다. 또한 "맞춤법 검사"기능을 도입하고 싶습니다. "믿을 수없는"대신 "ubelievable"을 입력하면 결과가 나옵니다.
searcher, analyze,"keyword",serialVersionUID);
동의어 확장이 나를 위해 작동하지 않는 이유와 맞춤법 검사 방법을 알지 못합니다. 누군가 나를 안내 할 수 있다면 정말 감사 할 것입니다.
감사합니다.
@ffriend이 추천 한 샘플 링크 http://subversion.assembla.com/svn/LuceneInAction/LuceneInAction/src/lia/analysis/synonym/ –