asdtiang的博客 感谢blogjava提供的博客交流平台

lucene2.4 学习笔记1

Posted on 2010-01-12 18:10 asdtiang 阅读(1430) 评论(0)  编辑  收藏 所属分类: 搜索引擎学习
网站要用搜索功能,本来想用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;
}

}



天苍苍,野茫茫,风吹草底见牛羊

只有注册用户登录后才能发表评论。


网站导航:
 

posts - 80, comments - 24, trackbacks - 0, articles - 32

Copyright © asdtiang

asdtiang的博客 PaidMailz
点击广告网赚A(每天4个广告,每个0.0025美元,一个搜索广告0.03美元)