lucene3.0实例下载
简介:可以试试本站的lucene全文索引功能 http://ask.itruanjian.com/search/
项目里面有个lucene.sql文件,下面有源码下载地址
部分代码 LuceneDao.java
package lucene;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.SimpleFSDirectory;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.wltea.analyzer.lucene.IKAnalyzer;
import service.IArticleService;
import service.imp.ArticleService;
import util.FileUtil;
import util.PaginationSupport;
import bean.Article;
@Aspect
public class LuceneDao implements ILuceneDao{
private IArticleService articleService;
/**
* 当新增文章时同时更新索引
*/
@AfterReturning("execution(* service.imp.ArticleService.save(..))&&args(article)")
public void createIndex(Article article) throws Exception{
String path=FileUtil.getLocalPath(Lucene.lucenePath);
Directory dir = new SimpleFSDirectory(new File(path));
boolean exist = IndexReader.indexExists(dir);
// IndexWriter.isLocked(dir);
IndexWriter writer = new IndexWriter(dir, new IKAnalyzer(), !exist, IndexWriter.MaxFieldLength.LIMITED);
try {
writer.addDocument(Lucene.createDocument(article));
} finally {
writer.close();
}
}
/**
* 对list集合的文章批量建了索引
*/
public void createIndex(List<Article> articles) throws Exception{
String path=FileUtil.getLocalPath(Lucene.lucenePath);
Directory dir = new SimpleFSDirectory(new File(path));
boolean exist = IndexReader.indexExists(dir);
IndexWriter writer = new IndexWriter(dir, new IKAnalyzer(), !exist, IndexWriter.MaxFieldLength.LIMITED);
try {
for(Article article:articles){
writer.addDocument(Lucene.createDocument(article));
}
writer.optimize();
} finally {
writer.close();
}
}
/**
*
*/
@AfterReturning("execution(* service.imp.ArticleService.del(..))&&args(article)")
public void deleteIndex(Article article) throws Exception{
String path=FileUtil.getLocalPath(Lucene.lucenePath);
Directory dir = new SimpleFSDirectory(new File(path));
boolean exist = IndexReader.indexExists(dir);
if (exist) {
IndexWriter writer = new IndexWriter(dir, new IKAnalyzer(), false,
IndexWriter.MaxFieldLength.LIMITED);
try {
if(article.getId()!=null&&!"".equals(article.getId())){
writer.deleteDocuments(new Term("id", article.getId().toString()));
}else if(article.getSortid()!=null&&!"".equals(article.getSortid())){
writer.deleteDocuments(new Term("sortid", article.getSortid().toString()));
}else{
writer.deleteAll();
}
} finally {
writer.close();
}
}
}
/**
*
*/
@AfterReturning("execution(* service.imp.ArticleService.update(..))&&args(article)")
public void updateIndex(Article article) throws Exception{
String path=FileUtil.getLocalPath(Lucene.lucenePath);
Directory dir = new SimpleFSDirectory(new File(path));
boolean exist = IndexReader.indexExists(dir);
IndexWriter writer = new IndexWriter(dir, new IKAnalyzer(), !exist, IndexWriter.MaxFieldLength.LIMITED);
try {
if (exist) {
writer.deleteDocuments(new Term("id", article.getId().toString()));
}
writer.addDocument(Lucene.createDocument(article));
} finally {
writer.close();
}
}
public List<Article> searchList() throws Exception{
String path=FileUtil.getLocalPath(Lucene.lucenePath);
Directory dir = new SimpleFSDirectory(new File(path));
return null;
}
/**
*
*/
public PaginationSupport<Article> searchPage(Article article,int startIndex,int pageSize) throws Exception{
String path=FileUtil.getLocalPath(Lucene.lucenePath);
Directory dir = new SimpleFSDirectory(new File(path));
Searcher searcher = new IndexSearcher(dir);
Analyzer analyzer = new IKAnalyzer();
Query query = Lucene.createQuery(article, analyzer);
Sort sort = new Sort(new SortField[]{SortField.FIELD_SCORE,new SortField("createtime", SortField.INT, true)});
TopDocs docs = searcher.search(query,null,startIndex+pageSize,sort);
// TopDocs docs = searcher.search(query,startIndex+pageSize);
PaginationSupport<Article> p = Lucene.getResultPage(searcher, docs, startIndex,
pageSize);
List<Article> ids = p.getItems();
List<Article> articles = new ArrayList<Article>(ids.size());
for(Article article2:ids){
Article article3=articleService.getById(article2.getId());
String title=Lucene.hight(query, analyzer, article3.getTitle(), 0);
String content=Lucene.hight(query, analyzer, article3.getContent(), 150);
if(title!=null){
article3.setTitle(title);
}
if(content!=null){
article3.setContent(content);
}else{
article3.setContent(Lucene.getNoHtml(article3.getContent(), 150));
}
articles.add(article3);
}
p.setItems(articles);
return p;
}
public void setArticleService(IArticleService articleService) {
this.articleService = articleService;
}
} 相关推荐
Jacry 2020-07-04
Kafka 2020-09-18
Wepe0 2020-10-30
windle 2020-10-29
mengzuchao 2020-10-22
Junzizhiai 2020-10-10
bxqybxqy 2020-09-30
风之沙城 2020-09-24
kingszelda 2020-09-22
大唐帝国前营 2020-08-18
yixu0 2020-08-17
TangCuYu 2020-08-15
xiaoboliu00 2020-08-15
songshijiazuaa 2020-08-15
xclxcl 2020-08-03
zmzmmf 2020-08-03
newfarhui 2020-08-03