6 Lucene笔记(六):检索结果排序问题
来源:互联网 发布:爱淘宝推广链接 编辑:程序博客网 时间:2024/06/14 07:25
packagech.lucene.app;
importjava.util.ArrayList;
importjava.util.List;
importorg.apache.lucene.document.Document;
importorg.apache.lucene.index.IndexWriter;
importorg.apache.lucene.queryParser.QueryParser;
importorg.apache.lucene.search.IndexSearcher;
importorg.apache.lucene.search.Query;
importorg.apache.lucene.search.ScoreDoc;
importorg.apache.lucene.search.Sort;
importorg.apache.lucene.search.SortField;
importorg.apache.lucene.search.TopDocs;
importorg.junit.Test;
importch.lucene.entity.Article;
importch.lucene.utils.LuceneUtils;
/**
* 排序问题
*@authorJayin
*/
publicclassSixApp {
/**
* 创建索引库
*@throwsException
*/
@Test
publicvoidcreateIndexDB()throwsException {
//创建javabean 对象
Articleart= newArticle(3,"搜索排序问题" , "搜索什么好呢,反正就随便咯,金木研说的。");
/*Article art1 = new Article(2, "搜索排序问题", "搜索什么好呢,反正就随便咯,金木研说的。。");
Article art2 = new Article(4, "搜索问题", "搜索什么好呢金木研说的。。");
Article art3 = new Article(1, "搜索问题", "反正就随便咯,金木研说的。");*/
//创建document对象,并将 javabean对象转换为document对象
Documentdoc= LuceneUtils.javaBeanToDocument(art);
//创建IndexWrite对象
IndexWriteriw= newIndexWriter(LuceneUtils.getDirectory(), LuceneUtils.getAnalyzer(), LuceneUtils.getMaxFieldLength());
//将doc写入到索引库中
iw.addDocument( doc);
//关闭
iw.close();
}
/**
* 根据关键字搜索
*@throwsException
*/
@Test
publicvoidfindByKeyword()throwsException {
//关键字
Stringkeyword= "金木";
//创建数组
List<Article>artList= newArrayList<Article>();
//创建IndexSearcher字符流对象
IndexSearcherindexSearcher= newIndexSearcher(LuceneUtils.getDirectory());
//创建解析器
QueryParserqueryParser= newQueryParser(LuceneUtils.getVersion(),"content", LuceneUtils.getAnalyzer());
//封装关键字
Queryquery= queryParser.parse(keyword);
//根据关键字,去索引库中的词汇表搜索
//TopDocs topDocs = indexSearcher.search(query, 100);
//按得分度高低排序
//TopDocs topDocs = indexSearcher.search(query,100);
//创建排序对象
//参数一:id表示依据document对象中的哪个字段排序,例如:id
//参数二:SortField.INT表示document对象中该字段的类型,以常量方式书写
//参数三:true表示降序,类似于order by iddesc
//参数三:false表示升序,类似于order by idasc
//Sort sort = new Sort(new SortField("id",SortField.INT,false));
//按count字段的降序排列,如果count字段相同的话,再按id的升序排序
Sortsort= newSort(
newSortField("count",SortField.INT,true),
newSortField("id",SortField.INT,false));
//sort表示排序的条件
TopDocstopDocs= indexSearcher.search(query,null,100,sort);
for( int i = 0 ; i< topDocs. scoreDocs. length; i++){
//获取对象
ScoreDocscoreDoc= topDocs.scoreDocs[i];
//获取编号
intno = scoreDoc.doc;
//获取属性的值
Documentdoc= indexSearcher.doc(no);
//document转换成javabean
Articleart= (Article) LuceneUtils.documentToJavaBean(doc, Article.class);
//将art添加到数组集合中
artList.add(art);
for(Articlearticle: artList){
System.out.println(article);
}
}
}
}
单字段排序:
Sort sort = new Sort(newSortField("id",SortField.INT,true));
TopDocs topDocs = indexSearcher.search( query,null,1000000,sort);
多字段排序:
Sort sort = new Sort(newSortField("count",SortField.INT,true),newSortField("id",SortField.INT,false));
单字段搜索:
QueryParser queryParser = new QueryParser(LuceneUtils.getVersion(),"content", LuceneUtils.getAnalyzer());
多字段搜索:(推荐)
QueryParser queryParser = new MultiFieldQueryParser(LuceneUtils.getVersion(),newString[]{"centent","title"}, LuceneUtils.getAnalyzer ());
0 0
- 6 Lucene笔记(六):检索结果排序问题
- Lucene检索结果的排序问题、boost(激励因子)
- lucene-检索结果的翻页问题
- Lucene学习笔记(4)-检索功能
- Lucene检索笔记
- Lucene全文检索学习笔记(一):lucene的应用
- lucene搜索结果排序
- lucene学习笔记2--检索
- Lucene学习笔记之(六)lucene的中文查询
- Lucene学习笔记(六)
- 用lucene实现在上次检索结果中再检索
- 全文检索(lucene)
- Lucene的搜索结果排序
- 关于jforum2.1.6的检索问题(采用lucene实现)
- 数据库笔记6(下半部分):检索 排序 过滤
- 数据库笔记6:检索,排序检索,过滤数据
- JAVA_WEB项目之Lucene实现检索结果排序和关键字在索引库中多字段查询结果进行高亮显示
- 【转载】Lucene学习笔记(六)
- Android 自定义的一个带有标题栏的相对布局
- 5 Lucene笔记(五):搜索结果高亮
- java设计模式之观察者模式(observer)
- 魅族自动化测试架构之路
- IT企业面经
- 6 Lucene笔记(六):检索结果排序问题
- oracle的varchar2()与varchar()的关系
- SLAM的前世今生 终于有人说清楚了 | 硬创公开课
- 教你自定义ListView实现下拉刷新,上拉加载更多
- ES6里symbol
- 为何说张三丰是个优秀的程序员?
- 获取View控件在屏幕的坐标
- 利用@media screen实现网页布局的自适应,@media screen and
- Android开源项目推荐之「网络请求哪家强」