博客信息

addBatch()用法(jdbc事务控制)

发布时间:『 2012-06-03 10:44』  博客类别:Oracle  阅读(1864) 评论(0)
package com.zhangjie.lucene;

import java.io.StringReader;
import java.nio.file.Paths;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.search.highlight.Fragmenter;
import org.apache.lucene.search.highlight.Highlighter;
import org.apache.lucene.search.highlight.QueryScorer;
import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
import org.apache.lucene.search.highlight.SimpleSpanFragmenter;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory;
import org.wltea.analyzer.lucene.IKAnalyzer;

import com.zhangjie.entity.Blog;
import com.zhangjie.util.ApplicationProperty;
import com.zhangjie.util.DateUtil;
import com.zhangjie.util.StringUtil;

/**
 * 博客索引类
 * @author imzhangjie.cn
 */
public class BlogIndex {

    private Directory dir=null;
    

    /**
     * 获取IndexWriter实例
     * @return
     */
    private IndexWriter getWriter()throws Exception{
        dir=FSDirectory.open(Paths.get(ApplicationProperty.getProperty("lucence.index.path")));
//        SmartChineseAnalyzer analyzer=new SmartChineseAnalyzer();
        Analyzer analyzer =new IKAnalyzer();
        IndexWriterConfig iwc=new IndexWriterConfig(analyzer);
        IndexWriter writer=new IndexWriter(dir, iwc);
        return writer;
    }
    
    /**
     * 添加博客索引
     * @param blog
     */
    public void addIndex(Blog blog)throws Exception{
        IndexWriter writer=getWriter();
        Document doc=new Document();
        doc.add(new StringField("id",String.valueOf(blog.getId()),Field.Store.YES));
        doc.add(new TextField("title",blog.getTitle(),Field.Store.YES));
        doc.add(new StringField("releaseDate",DateUtil.formatDate(new Date(), "yyyy-MM-dd"),Field.Store.YES));
        doc.add(new TextField("content",blog.getContentNoTag(),Field.Store.YES));
        writer.addDocument(doc);
        writer.close();
    }
    
    /**
     * 更新博客索引
     * @param blog
     * @throws Exception
     */
    public void updateIndex(Blog blog)throws Exception{
        IndexWriter writer=getWriter();
        Document doc=new Document();
        doc.add(new StringField("id",String.valueOf(blog.getId()),Field.Store.YES));
        doc.add(new TextField("title",blog.getTitle(),Field.Store.YES));
        doc.add(new StringField("releaseDate",DateUtil.formatDate(new Date(), "yyyy-MM-dd"),Field.Store.YES));
        doc.add(new TextField("content",blog.getContentNoTag(),Field.Store.YES));
        writer.updateDocument(new Term("id", String.valueOf(blog.getId())), doc);
        writer.close();
    }
    
    /**
     * 删除指定博客的索引
     * @param blogId
     * @throws Exception
     */
    public void deleteIndex(String blogId)throws Exception{
        IndexWriter writer=getWriter();
        writer.deleteDocuments(new Term("id",blogId));
        writer.forceMergeDeletes(); // 强制删除
        writer.commit();
        writer.close();
    }
    
    /**
     * 查询博客信息
     * @param q 查询关键字
     * @return
     * @throws Exception
     */
    public List<Blog> searchBlog(String q)throws Exception{
        dir=FSDirectory.open(Paths.get(ApplicationProperty.getProperty("lucence.index.path")));
        IndexReader reader = DirectoryReader.open(dir);
        IndexSearcher is=new IndexSearcher(reader);
        BooleanQuery.Builder booleanQuery = new BooleanQuery.Builder();
//        SmartChineseAnalyzer analyzer=new SmartChineseAnalyzer();
        Analyzer analyzer =new IKAnalyzer();
        QueryParser parser=new QueryParser("title",analyzer);
        Query query=parser.parse(q);
        QueryParser parser2=new QueryParser("content",analyzer);
        Query query2=parser2.parse(q);
        booleanQuery.add(query,BooleanClause.Occur.SHOULD);
        booleanQuery.add(query2,BooleanClause.Occur.SHOULD);
        TopDocs hits=is.search(booleanQuery.build(), 100);
        QueryScorer scorer=new QueryScorer(query);  
        Fragmenter fragmenter = new SimpleSpanFragmenter(scorer);  
        SimpleHTMLFormatter simpleHTMLFormatter=new SimpleHTMLFormatter("<b><font color='red'>","</font></b>");
        Highlighter highlighter=new Highlighter(simpleHTMLFormatter, scorer);
        highlighter.setTextFragmenter(fragmenter);  
        List<Blog> blogList=new LinkedList<Blog>();
        for(ScoreDoc scoreDoc:hits.scoreDocs){
            Document doc=is.doc(scoreDoc.doc);
            Blog blog=new Blog();
            blog.setId(Integer.parseInt(doc.get(("id"))));
            blog.setReleaseDateStr(doc.get(("releaseDate")));
            String title=doc.get("title");
            String content=doc.get("content");
            if(title!=null){
                TokenStream tokenStream = analyzer.tokenStream("title", new StringReader(title));
                String hTitle=highlighter.getBestFragment(tokenStream, title);
                if(StringUtil.isEmpty(hTitle)){
                    blog.setTitle(title);
                }else{
                    blog.setTitle(hTitle);                    
                }
            }
            if(content!=null){
                TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(content)); 
                String hContent=highlighter.getBestFragment(tokenStream, content);
                if(StringUtil.isEmpty(hContent)){
                    if(content.length()<=200){
                        blog.setContent(content);
                    }else{
                        blog.setContent(content.substring(0, 200));                        
                    }
                }else{
                    blog.setContent(hContent);                    
                }
            }
            blogList.add(blog);
        }
        return blogList;
    }
}


关键字:   无

上一篇:没有了

下一篇:oracle树形结构由子节点递归得到父节点

评论信息
暂无评论
发表评论
验证码: 
Powered by IMZHANGJIE.CN Copyright © 2015-2025 粤ICP备14056181号