Lucene多字段查询&高亮显示
2017-04-08 12:05
351 查看
在百度搜索的时候,查询的关键词会高亮显示
在搜索一个关键词的时候,有可能这个关键词在title和content中,搜索的时候要把结果全部显示出来
输出结果:
Article [id=1, title=显卡, content=显卡是电脑的核心部件, count=10]
在搜索一个关键词的时候,有可能这个关键词在title和content中,搜索的时候要把结果全部显示出来
实例说明
package com.bart.lucene.mutilseacher; import java.util.ArrayList; import java.util.List; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.queryParser.MultiFieldQueryParser; import org.apache.lucene.queryParser.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.search.highlight.Formatter; import org.apache.lucene.search.highlight.Highlighter; import org.apache.lucene.search.highlight.QueryScorer; import org.apache.lucene.search.highlight.Scorer; import org.apache.lucene.search.highlight.SimpleHTMLFormatter; import org.junit.Test; import com.bart.lucene.entity.Article; import com.bart.lucene.util.LuceneUtils; /** * Article多条件搜索加高亮显示 * @author hp */ public class ArticleDao { /** * 高亮显示 * 查询索引库中所有的记录 * @throws Exception */ @Test public void findAll() throws Exception{ String keyword = "显卡"; List<Article>articleList = new ArrayList<Article>(); IndexSearcher indexSearcher = new IndexSearcher(LuceneUtils.getDirectory()); //默认之搜索一个字段,单条件搜索 //QueryParser queryParser = new QueryParser(LuceneUtils.getVersion(),"content",LuceneUtils.getAnalyzer()); //搜索多个字段,多条件搜索 QueryParser queryParser2 = new MultiFieldQueryParser(LuceneUtils.getVersion(),new String[]{"title","content"},LuceneUtils.getAnalyzer()); //Query query = queryParser.parse(keyword); Query query = queryParser2.parse(keyword); TopDocs topDocs = indexSearcher.search(query,100); //以下代码对查询结果进行高亮显示 // 1.格式化对象,设置前缀和后缀 Formatter formatter = new SimpleHTMLFormatter("<font color='red'>","</font>"); // 2.关键词对象 Scorer scorer = new QueryScorer(query); // 3. 高亮对象 Highlighter highlighter = new Highlighter(formatter, scorer); for(int i=0;i<topDocs.scoreDocs.length;i++){ ScoreDoc scoreDoc = topDocs.scoreDocs[i]; int no = scoreDoc.doc; //关键词没有高亮 Document document = indexSearcher.doc(no); // 1. 关键词添加高亮 String titleHighLight = highlighter.getBestFragment(LuceneUtils.getAnalyzer(),"title",document.get("title")); String contentHighLight = highlighter.getBestFragment(LuceneUtils.getAnalyzer(),"content",document.get("content")); // 2. 将高亮的结果再次封装到document对象中 document.getField("title").setValue(titleHighLight); document.getField("content").setValue(contentHighLight); Article article = LuceneUtils.document2JavaBean(document,Article.class); articleList.add(article); } //遍历 for(Article a : articleList){ System.out.println(a); } } /** * 增加document对象到对象索引库中 * @throws Exception */ @Test public void testCreate() throws Exception{ Article article = new Article(1,"显卡","显卡是电脑的核心部件",10); Document document = LuceneUtils.javaBean2Document(article); IndexWriter indexWriter = new IndexWriter(LuceneUtils.getDirectory(), LuceneUtils.getAnalyzer(), LuceneUtils.getMaxFieldLength()); indexWriter.addDocument(document); //设置当插入三条记录的时候合并到同一条记录,默认是10个缓存就合并索引的cfs文件 indexWriter.setMergeFactor(3); // //合并记录,不管插入多少条 // indexWriter.optimize(); indexWriter.close(); } }
输出结果:
Article [id=1, title=显卡, content=显卡是电脑的核心部件, count=10]
相关文章推荐
- Lucene 3.6.1:中文分词、创建索引库、排序、多字段分页查询以及高亮显示
- JAVA_WEB项目之Lucene实现检索结果排序和关键字在索引库中多字段查询结果进行高亮显示
- Lucene查询并高亮显示
- 【Lucene】使用EasyUI和JQuery配合Lucene实现数据的分页查询以及高亮显示
- 【Lucene】使用EasyUI和JQuery配合Lucene实现数据的分页查询以及高亮显示
- lucene查询后关键字高亮显示
- ElasticSearch多个字段分词查询高亮显示
- lucene的多个字段搜索以及分页并高亮显示
- oracle 中文字段查询后结果集标题显示为"???"
- lucene中处理将查询结果中的关键字高亮显示
- ElasticSearch多个字段分词查询高亮显示
- Lucene开发实例教程:Lucene中文分词、分页查询、高亮显示
- Lucene学习一:入门级Demo,创建索引和查询高亮显示
- lucene-使用Highlighter高亮显示查询项
- MYSQL 计算COUNT的同时查询显示其他字段
- 【已测试通过】::ArcGISServer简单查询并高亮显示
- Source Insight查看ARM汇编源程序 && Source Insight打开project窗口出错 && 高亮显示程序 && 标题栏显示全路径 .
- lucene 高亮显示
- SQL中NTEXT字段内容显示<long text>的原因
- Hibernate查询任意字段,通过LinkedList<Object[]>取值