使用Lucene开发简单的站内新闻搜索引擎(索引的搜索)
2017-05-23 11:30
555 查看
上一篇以及创建好索引,搜索引擎当然少不了搜索。这里为了方便,所以就不把数据保存到数据库,使用Lucene的搜索方法。开始贴代码。
测试结果
这里可以看出,一共查询到一条记录匹配的。所以的方法测试时成功的
将上面查询代码修改
从结果中可以看出关键词添加了span标签,测试成功。
简单的搜索代码
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; }
测试搜索代码
使用单元测试@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开发简单的站内新闻搜索引擎(搜索结果的显示)
- 使用Lucene开发简单的站内新闻搜索引擎(环境的搭建)
- 使用Lucene开发简单的站内新闻搜索引擎(索引库的创建)
- 使用lucene3.6创建索引和实现简单搜索
- Lucene.net站内搜索3—最简单搜索引擎代码
- 使用Lucene.NET实现简单的站内搜索
- 使用Lucene开发自己的搜索引擎–(3)indexer索引程序中基本类介绍
- Lucene.net站内搜索-最简单搜索引擎代码
- 使用lucene3.6创建索引和实现简单搜索
- 开发搜索引擎初步(二)搜索(Lucene实现)
- 使用DataList和SQL2005实现分页显示数据(应用举例:站内简单搜索)
- 转 lucene3搜索引擎,索引建立搜索排序分页高亮显示, IKAnalyzer分词
- 使用Lucene+Paoding构建SSH2系统的站内搜索
- 使用Lucene+Paoding构建SSH2系统的站内搜索---
- 使用Lucene对建立的索引进行搜索
- Beta笔记——搜索引擎的设计与实现(1):使用Lucene.Net建立索引与中文分词
- DotLucene搜索引擎Demo之:搜索索引
- 开发搜索引擎初步(一)建立索引(Lucene实现)
- Lucene2.9.2 + 盘古分词2.3.1(一) 入门: 建立简单索引,搜索(原创)