6 Lucene笔记(六):检索结果排序问题
2016-10-13 11:56
363 查看
[align=left]packagech.lucene.app;[/align]
[align=left]
[/align]
[align=left]importjava.util.ArrayList;[/align]
[align=left]importjava.util.List;[/align]
[align=left]
[/align]
[align=left]importorg.apache.lucene.document.Document;[/align]
[align=left]importorg.apache.lucene.index.IndexWriter;[/align]
[align=left]importorg.apache.lucene.queryParser.QueryParser;[/align]
[align=left]importorg.apache.lucene.search.IndexSearcher;[/align]
[align=left]importorg.apache.lucene.search.Query;[/align]
[align=left]importorg.apache.lucene.search.ScoreDoc;[/align]
[align=left]importorg.apache.lucene.search.Sort;[/align]
[align=left]importorg.apache.lucene.search.SortField;[/align]
[align=left]importorg.apache.lucene.search.TopDocs;[/align]
[align=left]importorg.junit.Test;[/align]
[align=left]
[/align]
[align=left]importch.lucene.entity.Article;[/align]
[align=left]importch.lucene.utils.LuceneUtils;[/align]
[align=left]
[/align]
[align=left]/**[/align]
[align=left] * 排序问题[/align]
[align=left] *@authorJayin[/align]
[align=left] */[/align]
[align=left]publicclassSixApp {[/align]
[align=left]/**[/align]
[align=left] * 创建索引库[/align]
[align=left] *@throwsException[/align]
[align=left] */[/align]
[align=left] @Test[/align]
publicvoidcreateIndexDB()
throws
Exception {
//创建javabean 对象
Articleart
=
newArticle(3,
"搜索排序问题"
, "搜索什么好呢,反正就随便咯,金木研说的。"
);
/*Article art1 = new Article(2, "搜索排序问题", "搜索什么好呢,反正就随便咯,金木研说的。。");
[align=left] Article art2 = new Article(4, "搜索问题", "搜索什么好呢金木研说的。。");[/align]
[align=left] Article art3 = new Article(1, "搜索问题", "反正就随便咯,金木研说的。");*/ [/align]
//创建document对象,并将 javabean对象转换为document对象
Documentdoc
= LuceneUtils.javaBeanToDocument(art);
//创建IndexWrite对象
IndexWriteriw
=
newIndexWriter(LuceneUtils.getDirectory(), LuceneUtils.getAnalyzer(), LuceneUtils.getMaxFieldLength());
//将doc写入到索引库中
iw.addDocument(
doc);
//关闭
iw.close();
[align=left] }[/align]
[align=left] /**[/align]
[align=left] * 根据关键字搜索[/align]
[align=left] *@throwsException[/align]
[align=left] */[/align]
[align=left] @Test[/align]
publicvoidfindByKeyword()
throws
Exception {
//关键字
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);
//按得分度高低排序
[align=left] //TopDocs topDocs = indexSearcher.search(query,100); [/align]
[align=left] //创建排序对象[/align]
[align=left] //参数一:id表示依据document对象中的哪个字段排序,例如:id[/align]
[align=left] //参数二:SortField.INT表示document对象中该字段的类型,以常量方式书写[/align]
[align=left] //参数三:true表示降序,类似于order by iddesc[/align]
[align=left] //参数三:false表示升序,类似于order by idasc[/align]
[align=left] //Sort sort = new Sort(new SortField("id",SortField.INT,false));[/align]
[align=left] [/align]
[align=left] //按count字段的降序排列,如果count字段相同的话,再按id的升序排序[/align]
Sortsort
=
newSort(
new
SortField("count",SortField.INT,true),
new
SortField("id",SortField.INT,false));
[align=left] [/align]
[align=left] //sort表示排序的条件[/align]
TopDocstopDocs
=
indexSearcher.search(query,null,100,sort);
[align=left] [/align]
for(
int
i = 0 ;
i<
topDocs.
scoreDocs.
length;
i++){
[align=left] //获取对象[/align]
ScoreDocscoreDoc
=
topDocs.scoreDocs[i];
[align=left] //获取编号[/align]
int
no
= scoreDoc.
doc;
[align=left] //获取属性的值[/align]
Documentdoc
=
indexSearcher.doc(no);
//document转换成
javabean
Articleart
= (Article) LuceneUtils.documentToJavaBean(doc, Article.class);
[align=left] //将art添加到数组集合中[/align]
[align=left] artList.add(art);[/align]
for(Articlearticle
:
artList){
[align=left] System.out.println(article);[/align]
}
aea4
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
单字段排序:
Sort
sort =
new Sort(newSortField("id",SortField.INT,true));
TopDocs topDocs =
indexSearcher.search( query,null,1000000,sort);
多字段排序:
Sort sort =
new Sort(new
SortField("count",SortField.INT,true),new
SortField("id",SortField.INT,false));
单字段搜索:
QueryParser
queryParser =
new QueryParser(LuceneUtils.getVersion(),"content", LuceneUtils.getAnalyzer());
多字段搜索:(推荐)
QueryParser
queryParser =
new MultiFieldQueryParser(LuceneUtils.getVersion(),new
String[]{"centent","title"},
LuceneUtils.getAnalyzer ());
[align=left]
[/align]
[align=left]importjava.util.ArrayList;[/align]
[align=left]importjava.util.List;[/align]
[align=left]
[/align]
[align=left]importorg.apache.lucene.document.Document;[/align]
[align=left]importorg.apache.lucene.index.IndexWriter;[/align]
[align=left]importorg.apache.lucene.queryParser.QueryParser;[/align]
[align=left]importorg.apache.lucene.search.IndexSearcher;[/align]
[align=left]importorg.apache.lucene.search.Query;[/align]
[align=left]importorg.apache.lucene.search.ScoreDoc;[/align]
[align=left]importorg.apache.lucene.search.Sort;[/align]
[align=left]importorg.apache.lucene.search.SortField;[/align]
[align=left]importorg.apache.lucene.search.TopDocs;[/align]
[align=left]importorg.junit.Test;[/align]
[align=left]
[/align]
[align=left]importch.lucene.entity.Article;[/align]
[align=left]importch.lucene.utils.LuceneUtils;[/align]
[align=left]
[/align]
[align=left]/**[/align]
[align=left] * 排序问题[/align]
[align=left] *@authorJayin[/align]
[align=left] */[/align]
[align=left]publicclassSixApp {[/align]
[align=left]/**[/align]
[align=left] * 创建索引库[/align]
[align=left] *@throwsException[/align]
[align=left] */[/align]
[align=left] @Test[/align]
publicvoidcreateIndexDB()
throws
Exception {
//创建javabean 对象
Articleart
=
newArticle(3,
"搜索排序问题"
, "搜索什么好呢,反正就随便咯,金木研说的。"
);
/*Article art1 = new Article(2, "搜索排序问题", "搜索什么好呢,反正就随便咯,金木研说的。。");
[align=left] Article art2 = new Article(4, "搜索问题", "搜索什么好呢金木研说的。。");[/align]
[align=left] Article art3 = new Article(1, "搜索问题", "反正就随便咯,金木研说的。");*/ [/align]
//创建document对象,并将 javabean对象转换为document对象
Documentdoc
= LuceneUtils.javaBeanToDocument(art);
//创建IndexWrite对象
IndexWriteriw
=
newIndexWriter(LuceneUtils.getDirectory(), LuceneUtils.getAnalyzer(), LuceneUtils.getMaxFieldLength());
//将doc写入到索引库中
iw.addDocument(
doc);
//关闭
iw.close();
[align=left] }[/align]
[align=left] /**[/align]
[align=left] * 根据关键字搜索[/align]
[align=left] *@throwsException[/align]
[align=left] */[/align]
[align=left] @Test[/align]
publicvoidfindByKeyword()
throws
Exception {
//关键字
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);
//按得分度高低排序
[align=left] //TopDocs topDocs = indexSearcher.search(query,100); [/align]
[align=left] //创建排序对象[/align]
[align=left] //参数一:id表示依据document对象中的哪个字段排序,例如:id[/align]
[align=left] //参数二:SortField.INT表示document对象中该字段的类型,以常量方式书写[/align]
[align=left] //参数三:true表示降序,类似于order by iddesc[/align]
[align=left] //参数三:false表示升序,类似于order by idasc[/align]
[align=left] //Sort sort = new Sort(new SortField("id",SortField.INT,false));[/align]
[align=left] [/align]
[align=left] //按count字段的降序排列,如果count字段相同的话,再按id的升序排序[/align]
Sortsort
=
newSort(
new
SortField("count",SortField.INT,true),
new
SortField("id",SortField.INT,false));
[align=left] [/align]
[align=left] //sort表示排序的条件[/align]
TopDocstopDocs
=
indexSearcher.search(query,null,100,sort);
[align=left] [/align]
for(
int
i = 0 ;
i<
topDocs.
scoreDocs.
length;
i++){
[align=left] //获取对象[/align]
ScoreDocscoreDoc
=
topDocs.scoreDocs[i];
[align=left] //获取编号[/align]
int
no
= scoreDoc.
doc;
[align=left] //获取属性的值[/align]
Documentdoc
=
indexSearcher.doc(no);
//document转换成
javabean
Articleart
= (Article) LuceneUtils.documentToJavaBean(doc, Article.class);
[align=left] //将art添加到数组集合中[/align]
[align=left] artList.add(art);[/align]
for(Articlearticle
:
artList){
[align=left] System.out.println(article);[/align]
}
aea4
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
单字段排序:
Sort
sort =
new Sort(newSortField("id",SortField.INT,true));
TopDocs topDocs =
indexSearcher.search( query,null,1000000,sort);
多字段排序:
Sort sort =
new Sort(new
SortField("count",SortField.INT,true),new
SortField("id",SortField.INT,false));
单字段搜索:
QueryParser
queryParser =
new QueryParser(LuceneUtils.getVersion(),"content", LuceneUtils.getAnalyzer());
多字段搜索:(推荐)
QueryParser
queryParser =
new MultiFieldQueryParser(LuceneUtils.getVersion(),new
String[]{"centent","title"},
LuceneUtils.getAnalyzer ());
相关文章推荐
- Lucene检索结果的排序问题、boost(激励因子)
- Lucene.Net2.0搜索结果排序问题
- [ lucene FAQ ] 检索结果怎么排序?对于不同类型(例如int型)的字段排序有什么区别吗?
- Beta笔记:对检索结果排序
- 实现lucene检索结果排序
- Lucene搜索结果排序问题(按时间倒序排的替代解决方法)
- 【北大天网搜索引擎TSE学习笔记】第8节——检索关键词+结果排序
- Lucene搜索结果排序问题(按时间倒序排的替代解决方法)
- JAVA_WEB项目之Lucene实现检索结果排序和关键字在索引库中多字段查询结果进行高亮显示
- lucene-检索结果的翻页问题
- 关于Lucene.net中文分词后的结果着色问题
- Lucene:基于Java的全文检索引擎简介 (笔记 by 车东)
- Lucene.net搜索结果排序(单条件和多条件)
- 烙饼排序问题最优次数求解 暑期学习笔记(九)
- 用Lucene实现在检索结果中再检索
- Lucene.net搜索结果排序(单条件和多条件)
- 解决模糊查询的结果记录排序问题
- 利用Boost影响Lucene查询结果的排序
- 解决模糊查询的结果记录排序问题
- 全文检索lucene学习笔记(一)