lucene3.0的增删改查
来源:互联网 发布:淘宝关闭货到付款流程 编辑:程序博客网 时间:2024/06/15 05:52
1.简单封装一下luncene的对象(lunceneUtil)
package cn.xt.crud;import java.io.File;import java.lang.reflect.Field;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.Index;import org.apache.lucene.document.Field.Store;import org.apache.lucene.store.Directory;import org.apache.lucene.store.FSDirectory;import org.apache.lucene.util.Version;public class LuncenUtil {public static Analyzer analyzer;public static Directory directory;private LuncenUtil(){}static {try {analyzer = new StandardAnalyzer(Version.LUCENE_30);directory = FSDirectory.open(new File("./indexDir"));} catch (Exception e) {e.printStackTrace();}}/** * 将bean封装成Document对象 * * @param bean * @return * @throws Exception */public static <T> Document bean2Document(T bean) throws Exception {Document doc = new Document();Class<? extends Object> clazz = bean.getClass();Field[] beanfields = clazz.getDeclaredFields();for (Field field : beanfields) {field.setAccessible(true);String name = field.getName();String value = field.get(bean).toString();//System.out.println(value);boolean flag = (name!=null && name.equals("id"));org.apache.lucene.document.Field luncenField = new org.apache.lucene.document.Field(name, value,Store.YES,flag?Index.NOT_ANALYZED:Index.ANALYZED);doc.add(luncenField);}return doc;}}
2.编写增删改查测试
package cn.xt.crud;import org.apache.lucene.document.Document;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriter.MaxFieldLength;import org.apache.lucene.index.Term;import org.apache.lucene.queryParser.MultiFieldQueryParser;import org.apache.lucene.queryParser.QueryParser;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.util.Version;import org.junit.Before;import org.junit.Test;import cn.xt.pojo.Article;public class IndexCRUD {Article article = null;@Beforepublic void setUp() throws Exception {article = new Article();article.setId(1);article.setTitle("luncene 文章");article.setContent("是一个非常好用的全文搜索技术,very good。");}@Testpublic void testCreateIndex() throws Exception {IndexWriter writer = new IndexWriter(LuncenUtil.directory,LuncenUtil.analyzer, MaxFieldLength.LIMITED);writer.addDocument(LuncenUtil.bean2Document(article));writer.close();}@Testpublic void testDelete() throws Exception {IndexWriter writer = new IndexWriter(LuncenUtil.directory,LuncenUtil.analyzer, MaxFieldLength.LIMITED);//关键词对象,这里代表名为title的字段中的关键词luncene封装成关键词对象(前提是内容是允许分词的,Analyzer)Term term = new Term("title", "luncene");//一般删除索引都用关键词对象writer.deleteDocuments(term);writer.close();}@Testpublic void testUpdate() throws Exception {article.setTitle("heritrix 也是一个好东西");//luncene中的update其实就是先删除,在添加IndexWriter writer = new IndexWriter(LuncenUtil.directory,LuncenUtil.analyzer, MaxFieldLength.LIMITED);Term term = new Term("title", "luncene");writer.updateDocument(term, LuncenUtil.bean2Document(article));writer.close();}@Testpublic void testSearch() throws Exception {IndexSearcher search = new IndexSearcher(LuncenUtil.directory);//这里使用了一个可以传多个字段的查询解析器,表示从title和content字段中查找QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_30,new String[] {"title","content"}, LuncenUtil.analyzer);Query query = parser.parse("luncene");TopDocs topDocs = search.search(query, 2);//文档评分对象,描述关键词匹配度ScoreDoc[] scoreDocs = topDocs.scoreDocs;for (ScoreDoc scoreDoc : scoreDocs) {int idx = scoreDoc.doc;//索引的下标Document doc = search.doc(idx);Article article = new Article();article.setId(Integer.parseInt(doc.get("id")));article.setTitle(doc.get("title"));article.setContent(doc.get("content"));System.out.println(article);}}}
3.说明
luncene中的索引删除一般是通过term关键词对象来删除的,删除后会生成一个*.del的文件。
而修改其实就是先删除,然后在创建。
0 0
- lucene3.0的增删改查
- 一、lucene3.5的创建和增删改查
- lucene3.5的创建和增删改查
- Lucene3.6学习记录 索引的增删改查(二)
- Yii2.0 数据库的增删改查
- tp5.0简单的增删改查
- datagridview的增删改查
- jdbc的增删改查
- GridView 的增删改查
- 联系人的增删查改
- 数据库的增删改查
- Linq的增删改查
- Hibernate的增删改查
- 网页的增删改查
- struts2的增删改查
- XML的增删改查
- Hibernate的增删改查
- json的增删改查
- ELK Stack之filebeat使用
- 小技巧——二级指针的好处之一
- RMAN的监控和调整
- 2016/12/20学习工作总结
- 位运算
- lucene3.0的增删改查
- 【JavaScript】常用的函数
- JAVA对象jackson序列化json属性名首字母变成小写的解决方案
- 关键字static的作用
- 使用Docker如何构建Flink集群?
- machine learning yearning: 3
- 使用 jQuery 制作轮播图
- 虚机创建流程http://www.cnblogs.com/zhoumingang/p/5532409.html
- ECMAScript6简介和学习笔记(三)symbol proxy reflect set map