上一篇以及创建好索引,搜索引擎当然少不了搜索。这里为了方便,所以就不把数据保存到数据库,使用Lucene的搜索方法。开始贴代码。

简单的搜索代码

 public List<Article> findIndex(String keywords) throws Exception {List<Article> articles = new ArrayList<Article>();//Lucene的搜索方法IndexSearcher indexSearcher = LuceneUtils.getIndexSearcher();//所要搜索的位置/*** 在Lucene中索引的保存都是以键值对的形式保存,所以这里需要指定所要查询的域*/String fields[] = {"title", "content", "author"};//在Lucene中查询的方式还有很多,这里使用简单的MultiPhraseQuery查询MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fields, LuceneUtils.getAnalyzer());Query query = queryParser.parse(keywords);TopDocs topDocs = indexSearcher.search(query,500);ScoreDoc[] scoreDocs = topDocs.scoreDocsfor (int i = 0; i < scoreDocs.length; i++) {//封装查询到的结果Article article = new Article();int doc = scoreDocs[i].doc;Document document = indexSearcher.doc(doc);article.setId(document.get("id"));article.setTitle(document.get("title"));article.setContent(document.get("content"));article.setUrl(document.get("url"));article.setAuthor(document.get("author"));article.setDate(document.get("date"));articles.add(article);}return articles;
}

测试搜索代码

使用单元测试

@Test
public void testsearcher() throws Exception{String keywords="研讨会";List<Article> listArticles=luceneDao.findIndex(keywords);for(Article article:listArticles){System.out.println(article.getId());System.out.println(article.getTitle());System.out.println(article.getAuthor());System.out.println(article.getUrl());System.out.println(article.getContent());System.out.println(article.getDate());}
}

测试结果

这里可以看出,一共查询到一条记录匹配的。所以的方法测试时成功的

搜索结果高亮显示

在使用搜索引擎的时候,在搜索结果中我们搜索的关键词都会被现实成红色。这就是高亮的效果,帖条码…

    //高亮显示的方法,这里的高亮,其实就是给查询的结果添加一个html标签,修改相应的样式private String Highlighter(Query query, String field, String value) throws Exception {QueryScorer queryScorer = new QueryScorer(query);//所要添加的样式Formatter formatter = new SimpleHTMLFormatter("<span style='color:red;'>", "</span>");//设置高亮分词器Highlighter highlighter = new Highlighter(formatter, queryScorer);highlighter.setTextFragmenter(new SimpleFragmenter(100));String text = highlighter.getBestFragment(LuceneUtils.getAnalyzer(), field, value);return text;
}

将上面查询代码修改

public List<Article> findIndex(String keywords) throws Exception {List<Article> articles = new ArrayList<Article>();//Lucene的搜索方法IndexSearcher indexSearcher = LuceneUtils.getIndexSearcher();String fields[] = {"title", "content", "author"};//在Lucene中查询的方式还有很多,这里使用简单的MultiPhraseQuery查询MultiFieldQueryParser queryParser = new MultiFieldQueryParser(fields, LuceneUtils.getAnalyzer());Query query = queryParser.parse(keywords);TopDocs topDocs = indexSearcher.search(query,500);ScoreDoc[] scoreDocs = topDocs.scoreDocs;for (int i = 0; i < scoreDocs.length; i++) {Article article = new Article();int doc = scoreDocs[i].doc;Document document = indexSearcher.doc(doc);article.setId(document.get("id"));//高亮处理String title = this.Highlighter(query, "title", document.get("title"));if (title != null) {article.setTitle(title);} else {article.setTitle(document.get("title"));}String content = this.Highlighter(query, "content", document.get("content"));if (title != null) {article.setContent(content);} else {article.setContent(document.get("content"));}article.setUrl(document.get("url"));article.setAuthor(document.get("author"));article.setDate(document.get("date"));articles.add(article);}return articles;
}

测试高亮

从结果中可以看出关键词添加了span标签,测试成功。

使用Lucene开发简单的站内新闻搜索引擎(索引的搜索)相关推荐

  1. 使用Lucene开发简单的站内新闻搜索引擎(环境的搭建)

    全文检索的概念 全文检索是计算机程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置.当用户查询时根据建立的索引查找,类似于通过字典的检索字表查字的过程. Lucen ...

  2. Django博客开发(十三)—一个简单的站内搜索

    最近在努力的翻译Apple的测试文档,英文差果然是一个硬伤. 背景 博客内容越来越多了,慢慢的发现有时候需要一个搜索引擎来处理一些搜索的要求.当然,不需要那么复杂的逻辑,我们的博客只需要一个很小很小的 ...

  3. Mac上神奇的内置搜索引擎——Spotlight(聚焦搜索)

    今天来介绍一款Mac上神奇的内置搜索引擎--Spotlight,你只需要输入几个关键字,就能运行所有想要运行的程序,就能查到所有想要查找的文件.使用Spotlight,你可以"咻" ...

  4. Lucene 开发手册

    1.1  前言 l  编制本手册的目的: 1.描述Lucene用途,使开发人员依据本手册初步认识Lucene: 2.描述Lucene的API,使开发人员可以快速认识并利用Lucene开发搜索引擎: 3 ...

  5. -gMIS持续优化更新, +InSiteSearch站内搜索

    2019独角兽企业重金招聘Python工程师标准>>> -gMIS 部署和应用的场景越来越多,最近在考虑为所有gMIS承载管理的数据库系统增加一个站内搜索功能, +InSiteSea ...

  6. 使用Spring发送带附件的电子邮件(站内和站外传送)

    1.使用Spring发送带附件的电子邮件 <?xml version="1.0" encoding="UTF-8"?> <beansxmlns ...

  7. 什么是站内SEO优化(应该怎么做)

    什么是站内SEO优化(应该怎么做)-所有做google的小伙伴都需要面临的这个问题,或早或晚.今天我们就是全面的解析一下,站内seo优化,以下是此篇文章的目录. 目录 什么是站内SEO? 为什么要做站 ...

  8. 只需掌握这16点,学会seo站内优化

    [e6zzseo]专注seo搜索引擎优化技术8年以上,更新关于seo优化技术.seo推广.分享SEO优化工具.最新前沿seo套路技术研究开发. seo站内优化是一个seo项目的基础,做好站内优化不仅更 ...

  9. 刘莹:提升站内搜索的五大必要性

    刘莹:提升站内搜索的五大必要性 要点导读 移动互联网时代,智能搜索在手机 APP/微信小程序入口/企业门户网站的应用可以帮助用户轻松找到精准信息,也是运营者整体提升用户体验和效益的很好的切入点.垂直行 ...

最新文章

  1. 【通知】3月第二周直播预告,模型优化,人脸识别,图像增强核心技术与难题...
  2. 【转】使用Eclipse的代码追踪功能
  3. ORACLE TEXT DATASTORE PREFERENCE(一)
  4. CM: 如何通过attachment的physical instance id反查到所属的business object ID
  5. mips linux gcc mingw,gcc
  6. 手机为什么取消了内存卡?
  7. 好奇怪呀后面加什么标点_好奇怪,为什么开发商就不能把这款好户型打造得更完美些呢?...
  8. win10定时关机程序
  9. npm的那些“坑”——持续更新
  10. 涡CFTurbo 10.2.6 2017泵轮涡旋式机械设计
  11. 物联管家PDA 无缝对接网店管家云端 电商erp 实现电商条码无线仓储
  12. 聚合支付公司利楚扫呗获得腾讯、蚂蚁亿元入股
  13. Avatarify-人脸驱动项目在Linux环境中的实现
  14. Connection Backoff Interop Test Descriptions
  15. 程序员面试阿里、腾讯、京东等大公司,这些套路你知道吗?
  16. jquery的eval的使用
  17. 图片处理或背景创建网站 + 在线ps(photopea)使用
  18. 运筹说 第42期 | 算法介绍之运输问题
  19. 青少年CTF训练平台Misc-Middle愿风神忽悠你题解
  20. Node.js:nodemailer发送163邮件

热门文章

  1. 实时 12306 车票查询
  2. python解释器种类及特点_【Python面试】 说说Python解释器种类以及特点?
  3. mmocr 测试字符检测和识别模型
  4. 大数据 数据治理 | 微信交流群~
  5. C#跑马灯抽签小程序
  6. A记录和CNAME记录的区别
  7. 谷歌、火狐、IE浏览器驱动下载地址:
  8. 2021年4月Bmob无法访问Bmob云服务器
  9. 树莓派4B+EdgeX+MQTT的填坑之旅
  10. 直扩 单音干扰抑制 matlab,数学计算软件MATLAB资料集锦分享