`
umbrellall1
  • 浏览: 145846 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

LUCENE3.0 增,删,查+分页,改例子

 
阅读更多
首先引入包


代码:
建立索引
我现在数据库提取一些数据在里面
        //创建的文件路径,没有文件夹会给你自动生成一个
        private final static String PATH = "E:\\lucene";
        //分词器支持中英文记住自己创建时候的版本不然可能查不到数据
	private StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
        //IndexWriter(Directory d, Analyzer a, boolean create, MaxFieldLength mfl),第三个参数指定,true表示建立新的索引库或覆盖现有的索引库(删除后重建);false表示使用已有的索引库,如果不存在,就报错。
	IndexWriter writer = new IndexWriter(dir,analyzer , true,MaxFieldLength.UNLIMITED);
//循环查询出数据
			while(oracleRS.next()){
				//创建DOC由于我里面
				Document doc1 = new Document();
				//Filed这里面有几个参数,第一个设置的字段,第二个是设置该字段的值,第三,第四参见后面
				doc1.add(new Field("kid",String.valueOf(oracleRS.getInt("kid")),Field.Store.YES,Index.ANALYZED));
				doc1.add(new Field("title",oracleRS.getString("title"),Field.Store.YES,Index.ANALYZED));
				doc1.add(new Field("content",oracleRS.getString("content"),Field.Store.YES,Index.ANALYZED));
				//写入文件
				writer.addDocument(doc1);
			}
			//合并索引库文件
		    writer.optimize();
		    //释放资源
		    writer.close();
      




枚举类型 枚举常量 说明
Store            NO          不存储属性的值
           YES          存储属性的值
Index            NO          不建立索引
           ANALYZED 分词后建立索引
           NOT_ANALYZED 不分词,把整个内容作为一个词建立索引

索引建立好后会在我的D盘上生成一个叫lucene文件夹里面就是我们生成好的索引


查询

public String getIndex(String query)
	{
		String path = "D:\\lucene" ;
		try {
			FSDirectory dir = SimpleFSDirectory.open(new File(path));
			//读取文件
			IndexReader reader = IndexReader.open(dir);
			//实例查询对象
        	IndexSearcher searcher = new IndexSearcher(reader);
        	//这个是查询哪个字段里面的值 可以是多个或是一个,
        	String[] fileds = {"title","content"};
        	//设置分词器版本,查询哪个字段里面的值
            QueryParser parser = new MultiFieldQueryParser(Version.LUCENE_30, fileds, new StandardAnalyzer(Version.LUCENE_30));
            //生成一个Query对象
            Query querys = parser.parse(query);
            Directory directory = FSDirectory.open(new File(path));
            //这里为什么又要生成一个呢,因为我要查一个我查一共多少条数据后面主要分页查询
            IndexSearcher indexSearcher = new IndexSearcher(directory);
            TopDocs topDocs = indexSearcher.search(querys, 100);
            //总条数
            int count = topDocs.totalHits;
            //共查询多少条数据我是10条
            TopScoreDocCollector results = TopScoreDocCollector.create(10, false);
            searcher.search(querys, results);
            //分页从0条到10条
            TopDocs tds = results.topDocs(0, 10);
            ScoreDoc[] sd = tds.scoreDocs;
            //这个是将查询出来的关键词前后加字符,我的页面的EM标签设置的字体颜色是红色所以在关键词到了页面就变成了红色
        	Formatter formatter = new SimpleHTMLFormatter("<em>", "</em>");
        	Scorer scorer = new QueryScorer(querys);
            Highlighter highlighter = new Highlighter(formatter, scorer);
            //查询多少字
    		highlighter.setTextFragmenter(new SimpleFragmenter(10000));
    		//里面就是查询出来的值,循环遍历里面的值
            for (int i = 0; i < sd.length; i++) {
            	ScoreDoc scoreDoc = sd[i];
            	int docID = scoreDoc.doc;
            	Document document = indexSearcher.doc(docID);
            	String txt=highlighter.getBestFragment(new StandardAnalyzer(Version.LUCENE_30), "title", document.get("title"));
            	String txt2=highlighter.getBestFragment(new StandardAnalyzer(Version.LUCENE_30), "content", document.get("content"));
            	String txt3=document.get("url");
            	//获取该字段的值
            	System.out.println("kid:"+document.get("kid"));
            	System.out.println("title:"+txt);
            	System.out.println("content:"+document.get("content"));
            	System.out.println("url:"+txt3);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
		return null;
	}


后面的就比较简单了

然后是添加索引

/**
	 * 大致后上面一样IndexWriter writer = new IndexWriter(dir,analyzer , false,MaxFieldLength.UNLIMITED);
	 * 把它调成false就好了
	 * */
	public void ss() throws Exception{
		Directory dir = new SimpleFSDirectory(new File(PATH));
		IndexWriter writer = new IndexWriter(dir,analyzer , false,MaxFieldLength.UNLIMITED);
		Document doc1 = new Document();
		doc1.add(new Field("kid","4444",Field.Store.YES,Index.ANALYZED));
		doc1.add(new Field("title","阿森松岛",Field.Store.YES,Index.ANALYZED));
		doc1.add(new Field("content","枫的手",Field.Store.YES,Index.ANALYZED));
		doc1.add(new Field("url","阿萨德份额",Field.Store.YES,Index.ANALYZED));
		
		writer.addDocument(doc1);
		writer.optimize();
	    writer.close();
	}


删除
public void deleteLucene(String id){
		FSDirectory path;
		try {
			path = SimpleFSDirectory.open(new File("D:\\lucene"));
			StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
			IndexWriter writer = new IndexWriter(path,analyzer,false,MaxFieldLength.UNLIMITED);
			writer.setUseCompoundFile(true);
			//注意这里最好是填写唯一的不然到时会满足该情况时,数据都删了
			writer.deleteDocuments(new Term("kid",id)); 
			writer.optimize(); 
			writer.commit(); 
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


修改

public void updateLucene(String key,String up){
		System.out.println("修改");
		FSDirectory path;
		try {
			path = SimpleFSDirectory.open(new File("D:\\lucene"));
			StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
			IndexWriter writer = new IndexWriter(path,analyzer,false,MaxFieldLength.UNLIMITED);
			writer.setUseCompoundFile(true);
			Document document = new Document();
			/**
			 * 这里特别要说下一定要每个值都设置不然没设置的那个字段会是NULL
			 * */
			document.add(new Field("kid", key, Field.Store.YES,Index.ANALYZED));
			document.add(new Field("title", "sssss", Field.Store.YES,Index.ANALYZED));
			document.add(new Field("content", "sssss", Field.Store.YES,Index.ANALYZED));
			document.add(new Field("url", up, Field.Store.YES,Index.ANALYZED));
			//UPDATE方法
			writer.updateDocument(new Term("kid", key), document);
			//提交
			writer.commit();
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}	




分享到:
评论

相关推荐

    Lucene3.0增删改查和关键字高亮实例

    在这个“Lucene3.0增删改查和关键字高亮实例”项目中,我们将深入理解如何利用Lucene 3.0版本进行索引构建、文档的增删改查操作,并学习关键字高亮显示的实现方法。 首先,我们要了解**创建索引**的基本流程。在...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--dic

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    lucene3.0 lucene3.0

    lucene3.0 lucene3.0 lucene3.0 lucene3.0 lucene3.0

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part2

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part1

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--news.part1

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part3 SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--NewsWithSearch.part2 SSH + Lucene + 分页 + 排序 + 高亮 ...

    Lucene3.0之查询类型详解

    【Lucene3.0查询类型详解】 在Lucene3.0中,查询处理是一个关键环节,涉及多种查询方式和理论模型。以下是对这些概念的详细解释: 1. **查询方式**: - **顺序查询**:是最简单的查询方式,直接遍历索引,效率较...

    lucene 3.0 API 中文帮助文档 chm

    lucene 3.0 API中文帮助,学习的人懂得的

    lucene3.0庖丁+索引搜索程序

    《深入剖析Lucene3.0:庖丁解牛与索引搜索实践》 在IT行业中,搜索引擎技术扮演着至关重要的角色,而Lucene作为一个开源全文检索库,为开发者提供了强大的文本搜索功能。本文将深入探讨Lucene3.0版本,结合“庖丁解...

    lucene增删改查+IKAnalyzer

    《深入理解Lucene与IKAnalyzer:构建全文搜索引擎》 在信息技术高速发展的今天,数据的存储与检索变得至关重要。Lucene,作为一个开源的全文检索库,为开发者提供了强大的文本搜索功能。而IKAnalyzer作为针对中文...

    Lucene 3.0 原理与代码分析完整版

    《Lucene 3.0 原理与代码分析完整版》是一本深入解析Lucene 3.0搜索引擎库的专业书籍。Lucene是Apache软件基金会的开源项目,它为Java开发者提供了一个高性能、全文检索的工具包,广泛应用于各种信息检索系统。这...

    lucene3.0核心jar包

    同时,Lucene 3.0 支持对已有索引的增删改操作,但需要注意的是,这可能会增加索引的复杂性和大小。 7. **内存与缓存**:为了提升性能,Lucene 会在内存中缓存某些数据,如Term Frequency信息。在 3.0 版本中,合理...

    lucene3.0 例子

    lucene3.0 例子lucene3.0 例子 lucene3.0 例子 ,很好的学习,只有原代原,jar 包自己加上去就OK了

    lucene3.0 分词器

    lucene3.0 中文分词器, 庖丁解牛

    Lucene3.0全文信息检索

    **Lucene 3.0 全文信息检索** Lucene 是一个由Apache软件基金会4 Jakarta项目组开发的开源全文检索引擎工具包。自1999年发布以来,Lucene 已经发展成为Java世界中最为广泛使用的全文检索库,为开发者提供了构建高...

Global site tag (gtag.js) - Google Analytics