使用Lucene开发简单的站内新闻搜索引擎(索引的搜索)
来源:互联网 发布:电子图章制作软件 编辑:程序博客网 时间:2024/06/06 08:54
上一篇以及创建好索引,搜索引擎当然少不了搜索。这里为了方便,所以就不把数据保存到数据库,使用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.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")); 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;}
测试搜索代码
使用单元测试
@Testpublic 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标签,测试成功。
阅读全文
0 0
- 使用Lucene开发简单的站内新闻搜索引擎(索引的搜索)
- 使用Lucene开发简单的站内新闻搜索引擎(索引库的创建)
- 使用Lucene开发简单的站内新闻搜索引擎(搜索结果的显示)
- 使用Lucene开发简单的站内新闻搜索引擎(环境的搭建)
- Lucene索引的简单使用
- 基于lucene的案例开发:搜索索引
- 使用Lucene开发自己的搜索引擎–(2)配置环境和索引文件的建立indexer
- 使用Lucene开发自己的搜索引擎--(1)倒排索引基础知识
- 使用Lucene开发自己的搜索引擎–(3)indexer索引程序中基本类介绍
- 《开发自己的搜索引擎》读书笔记——Lucene搜索
- 简单的站内引用外部搜索
- Lucene整理--索引的搜索
- Lucene索引和搜索核心类的简单介绍
- lucene 4.3 索引的简单创建和搜索代码展示
- 搜索引擎的索引和搜索
- 1.搜索引擎的历史,搜索引擎起步,发展,繁荣,搜索引擎的原理,搜索技术用途,信息检索过程,倒排索引,什么是Lucene,Lucene快速入门
- 使用lucene搜索引擎实现对关键字的简单查询
- lucene搜索引擎的初级使用
- JAXB注解 java 关于xml的注解,自动生成xml文件
- #HDU2829#Lawrence(DP+ 斜率优化)
- LDD3源码分析之llseek分析
- react native TabBarIOS 使用详解
- Android:读取本地相册与相机获取图片上传到服务器(用字符串的形式上传)
- 使用Lucene开发简单的站内新闻搜索引擎(索引的搜索)
- Android 获取MAC地址(6.0版本和低版本都适用)
- linux中mysql连接超时,查看默认配置信息
- 从快速排序看递归
- 麦恩简介
- 正则表达中常用方法小结 test(),exec(),search(),match()区别及应用。
- JQuery插件:批量上传SWFUpload
- ambari-server-资源请求分析
- 块设备驱动介绍