lucene2.4 学习笔记1

网站要用搜索功能,本来想用SQL语句来实现,后来感觉没什么意思,并开始考虑用LUCENE,去官网下载了2.9的版本,发现新东西比较多,于时下载了  2 .4版本.相比以前的版本有些变化。
首先建立Index:类文件如下:

import  jeasy.analysis.MMAnalyzer;

import  org.apache.lucene.analysis.Analyzer;
import  org.apache.lucene.analysis.standard.StandardAnalyzer;
import  org.apache.lucene.document.Document;
import  org.apache.lucene.document.Field;
import  org.apache.lucene.index.CorruptIndexException;
import  org.apache.lucene.index.IndexWriter;
import  org.apache.lucene.store.LockObtainFailedException;

import  com.lmsCard.www.bean.company.Company;
import  com.lmsCard.www.tools.Init;
public   class  LuceneIndex {

private  String INDEX_STORE_PATH;
private  Analyzer analyzer;

public  LuceneIndex(){
Init init
= Init.getInit();
init.readInfo();
INDEX_STORE_PATH
= init.LUCENE_INDEX;
System.out.println(INDEX_STORE_PATH);
analyzer 
=   new  StandardAnalyzer();
}
//// /company 为一个bean
public   void  createCompanyIndex(Company company,  boolean  b) {
try  {
IndexWriter writer 
=   new  IndexWriter(INDEX_STORE_PATH  +   " /company " ,
analyzer, b, IndexWriter.MaxFieldLength.UNLIMITED);
System.out.println(INDEX_STORE_PATH
+ " /company " );
Document doc 
=   new  Document();
//   // 商家名称
doc.add( new  Field( " companyName " , company.getCompanyName(),
Field.Store.NO, Field.Index.ANALYZED));
//  /商家简介
if  (company.getInfo()  ==   null ) {
doc.add(
new  Field( " info " ,
company.getInfo() 
+   " www.lmscard.com " , Field.Store.NO,
Field.Index.ANALYZED));
else  {
doc.add(
new  Field( " info " , company.getInfo(), Field.Store.NO,
Field.Index.ANALYZED));
}
//  /折扣
doc.add( new  Field( " discount " , company.getZhekou()  +   "" ,
Field.Store.YES, Field.Index.NOT_ANALYZED));
//   // 备注
if (company.getBeizhu() == null || company.getBeizhu().equals( "" )){
doc.add(
new  Field( " comment " , company.getBeizhu()
+   " www.lmscard.com " , Field.Store.NO, Field.Index.ANALYZED));
}
doc.add(
new  Field( " comment " , company.getBeizhu() + " www.lmscard.com "
, Field.Store.YES, Field.Index.ANALYZED));

//   // /商家编号
doc.add( new  Field( " companyId " , company.getCompanyId(),
Field.Store.YES, Field.Index.NOT_ANALYZED));
//  /商家地址
if (company.getCompanyAddress() == null )
{
doc.add(
new  Field( " address " , company.getCompanyAddress() + " www.lmscard.com " ,
Field.Store.NO, Field.Index.ANALYZED));
}
else {
doc.add(
new  Field( " address " , company.getCompanyAddress(),
Field.Store.YES, Field.Index.ANALYZED));
}

System.out.println(company.getCompanyId());
writer.addDocument(doc);
writer.close();

catch  (CorruptIndexException e) {
//  TODO Auto-generated catch block
e.printStackTrace();
catch  (LockObtainFailedException e) {
//  TODO Auto-generated catch block
e.printStackTrace();
catch  (IOException e) {
//  TODO Auto-generated catch block
e.printStackTrace();
}
}

}

//// 建立一个搜索类:
import  java.util.ArrayList;
import  java.util.List;

import  org.apache.lucene.analysis.Analyzer;
import  org.apache.lucene.analysis.standard.StandardAnalyzer;
import  org.apache.lucene.document.Document;
import  org.apache.lucene.queryParser.MultiFieldQueryParser;
import  org.apache.lucene.search.BooleanClause;
import  org.apache.lucene.search.IndexSearcher;
import  org.apache.lucene.search.Query;
import  org.apache.lucene.search.ScoreDoc;
import  org.apache.lucene.search.Searcher;
import  org.apache.lucene.search.Sort;

import  com.lmsCard.www.tools.Init;

public   class  LuceneSearch {
private  Analyzer analyzer;
private  String type;
private  String INDEX_STORE_PATH;

public  LuceneSearch() {

Init init 
=  Init.getInit();
init.readInfo();
INDEX_STORE_PATH 
=  init.LUCENE_INDEX;
System.out.println(INDEX_STORE_PATH);
analyzer 
=   new  StandardAnalyzer();
}

public  List searchCompany(String keyWord, String type1) {
List l 
=   new  ArrayList();
if  (type1  ==   null ) {
this .type  =   " companyName " ;
}
try  {

BooleanClause.Occur[] clauses 
=  { BooleanClause.Occur.SHOULD,
BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD,
BooleanClause.Occur.SHOULD };
Searcher searcher 
=   new  IndexSearcher(INDEX_STORE_PATH  +   " /company " );
System.out.println(INDEX_STORE_PATH 
+   "   ffff   "   +  type
+   "  keyWord: "   +  keyWord);
Query query 
=  MultiFieldQueryParser.parse(keyWord,  new  String[] {
" companyName " " info " " comment " " address "  }, clauses,
analyzer);
//  此处在2.0基础上有改动,此处必须传入一个返回条数,这里用searcher.maxDoc()表示返回所有条数。
Sort sort = new  Sort( " backMoney " , true );
ScoreDoc[] docs 
=  searcher.search(query, searcher.maxDoc()).scoreDocs;
System.out.println(docs.length 
+   " docs.length " );
Document doc;
for  ( int  i  =   0 ; i  <  docs.length; i ++ ) {
doc 
=  searcher.doc(docs[i].doc);
l.add(doc.get(
" companyId " ));
System.out.println(doc.get(
" companyId " ));

}
catch  (Exception e) {
e.printStackTrace();
}
return  l;
}

}



asdtiang 2010-01-12 18:10 发表评论

你可能感兴趣的:(lucene2.4 学习笔记1)