为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > Java全文搜索引擎工具包

Java全文搜索引擎工具包

2018-04-11 6页 doc 21KB 18阅读

用户头像

is_337177

暂无简介

举报
Java全文搜索引擎工具包Java全文搜索引擎工具包 研究Lucence(Java全文搜索引擎工具包)有感 Lucence是Java全文搜索引擎工具包,可以提供站内全文搜索,当前是否能做成像百度一样 的搜索引擎,我就不知道了 首先来看看示例,先找个感觉 这是本人近期完成的一个购物商城的小项目,顶上的搜索就是用的Lucence实现全文搜索, 当前这个网站暂时还未完全启用,处于测试阶段,所有商品信息都是胡编乱造的,特此说明 例如:输入“诺基亚”“诺基亚 iphone4” 试试 ^_^ 我认为,Lucence其实就是在系统中创建了一个查询索引,你...
Java全文搜索引擎工具包
Java全文搜索引擎工具包 研究Lucence(Java全文搜索引擎工具包)有感 Lucence是Java全文搜索引擎工具包,可以提供站内全文搜索,当前是否能做成像百度一样 的搜索引擎,我就不知道了 首先来看看示例,先找个感觉 这是本人近期完成的一个购物商城的小项目,顶上的搜索就是用的Lucence实现全文搜索, 当前这个网站暂时还未完全启用,处于测试阶段,所有商品信息都是胡编乱造的,特此说明 例如:输入“诺基亚”“诺基亚 iphone4” 试试 ^_^ 我认为,Lucence其实就是在系统中创建了一个查询索引,你可以理解为一个磁盘文件,然 后将查询时需要的信息以某种方式保存的里面,然后当用户执行查询时,直接在这个磁盘文 件中查找,并将结果显示出来。 当然这是我的理解,不对之处,请批评 接下来就是实际代码 1.首先导入jar包(自己想办法下载,百度一下即可) lucene-core-3.0.2.jar IKAnalyzer3.2.3Stable.jar 2.创建索引,以下代码是在struts2 + spring中使用的查询,只看我的思路,光看代码无意 义 IndexWriter indexWriter = null; ServletContext context = (ServletContext) ActionContext.getContext() .get(ServletActionContext.SERVLET_CONTEXT); String indexUrl = context.getRealPath("/lucence/index"); File lucenceDir = new File(indexUrl); // 如果存在直接读取,如果没有就创建 if (lucenceDir.exists()) { indexWriter = new IndexWriter(FSDirectory.open(lucenceDir), new IKAnalyzer(), false, IndexWriter.MaxFieldLength.LIMITED); } else { indexWriter = new IndexWriter(FSDirectory.open(lucenceDir), new IKAnalyzer(), true, IndexWriter.MaxFieldLength.LIMITED); } 3.将数据库中的信息按我需要的形式添加到索引中去 Document doc = new Document(); String brandName = "";//取得品牌信息 String typeName = "";//取得类别信息 //拼接总介绍信息,将商品描述的前200个字截取出来 String summary = brandName + " " + typeName + " " + WebUtil.splitAndFilterString(product.getProductDescription(), 200); // 拼接检索内容,包含商品名称,类别名称,品牌名称,关键字,简单描述,详细描述 StringBuffer content = new StringBuffer(); content.append(product.getProductProName()); content.append(" " + brandName); content.append(" " + typeName); content.append(" " + product.getProductKeywords()); content.append(" " + product.getProductSimpleDescription()); content.append(" " + WebUtil.filterString(product.getProductDescription())); doc.add(new Field("uid", product.getProductId().toString(),Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("title", product.getProductProName(),Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("summary", summary, Field.Store.YES,Field.Index.NOT_ANALYZ doc.add(new Field("contents", content.toString(), Field.Store.YES,Field.Index.ANALYZED)); doc.add(new Field("modifyTime", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), Field.Store.YES, Field.Index.NOT_ANALYZED)); 4.最后添加到索引中 indexWriter.addDocument(doc);//将文档添加到索引中 indexWriter.optimize();//优化索引 5.查询索引中的信息 ServletContext context = (ServletContext) ActionContext.getContext().get(ServletActionContext.SERVLET_CONTEXT); IndexReader reader = IndexReader.open(FSDirectory.open(new File(context.getRealPath("/lucence/index"))), true); IndexSearcher searcher = new IndexSearcher(reader); // 在索引器中使用IKSimilarity相似度评估器 searcher.setSimilarity(new IKSimilarity()); // 使用IKQueryParser查询分析器构造Query对象 queryString = new String(queryString.getBytes("ISO-8859-1"),"UTF-8"); Query query = IKQueryParser.parse("contents", queryString); TopDocs hits = searcher.search(query, curPage * 20); if (hits.totalHits > 0) { int offset = (curPage - 1) * 20; int maxLength = 0; if (hits.totalHits - offset > 20) { maxLength = 20; maxPage = 0; } else { maxLength = hits.totalHits - offset; maxPage = 1;// 设置最后一页标志 } for (int i = offset; i < offset + maxLength; i++) { SearchBean bean = new SearchBean(); Document doc = searcher.doc(hits.scoreDocs[i].doc); bean.setUid(doc.get("uid")); bean.setTitle(doc.get("title")); bean.setSummary(doc.get("summary")); bean.setModifyTime(doc.get("modifyTime")); // 为title添加链接 bean.setTitle("" + bean.getTitle().trim() + ""); // 将关键字进行着色 queryString = queryString.trim(); String[] keys = queryString.split(" "); if (keys != null && keys.length > 0) { for (String curKey : keys) { bean.setTitle(bean.getTitle().replaceAll(curKey,"" + curKey + "")); bean.setSummary(bean.getSummary().replace(curKey,"" + curKey + "")); } } else { bean.setTitle(bean.getTitle().replaceAll(queryString,"" + queryString + "")); bean.setSummary(bean.getSummary().replace(queryString, "" + queryString + "")); } searchList.add(bean); } } else { searchList = null; }
/
本文档为【Java全文搜索引擎工具包】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索