- 浏览: 1068181 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (639)
- 服务器配置篇 (58)
- hibernate篇 (14)
- spring篇 (33)
- struts篇 (28)
- JS篇 (46)
- 其他技术篇 (46)
- 数据库集群配置 (6)
- JAVA基础相关 (48)
- 分布式框架HadHoop的应用 (2)
- FLEX篇 (8)
- SQLSERVER技术 (32)
- Android学习 (13)
- amchart学习笔记 (1)
- openfire+smark搭建即时通讯 (9)
- Linux学习 (18)
- Oracle数据库 (15)
- 网站优化技术 (12)
- mysql数据库 (2)
- 项目学习总结 (18)
- 工具类(JAVA) (12)
- 工具类(JS) (2)
- 设计模式 (10)
- Lucene学习 (24)
- EJB3学习 (6)
- Sphinx搜索引擎 (3)
- 工作中用到的软件小工具 (5)
- .NET (49)
- JAVA 连接SQLSERVER2008步骤 (1)
- MongoDB (19)
- Android手机开发 (3)
- Maven (6)
- vue (9)
- Shiro (4)
- mybatis (3)
- netty框架 (1)
- SpringCloud (3)
- spring-cloud (7)
- Git (1)
- dubbo (2)
- springboot (13)
- rocketmq (1)
- git学习 (2)
- kafka服务器 (2)
- linux (10)
- WEB系统辅助项目 (1)
- jenkins (2)
- docker (4)
- influxdb (3)
- python (2)
- nginx (1)
最新评论
-
jiangfuofu555:
这样数据量大,效率怎么样?
sqlserver 实现分页的前台代码 以及后台的sqlserver语句 -
w156445045:
博主请问下,如何做到实时的刷新呢,
另外我后台是Java 谢谢 ...
web 版本的汽车仪表盘,非常好看。还有各种图形 -
jackyin5918:
<transportConnector name=&qu ...
ActiveMQ的activemq.xml详细配置讲解 -
握着橄榄枝的人:
你这个不是spring1.x的吧
spring1.x使用AOP实例 -
xiaophai:
全乱套了!
openfire+spark搭建完美的及时通讯
前面介绍完查询以后,现在要对查询结果进行排序的显示。
代码:
package com.querytype;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;
public class QuerySortDemo2 {
/**
* @param args
*/
public static void main(String[] args) {
try {
/*
* Document doc1 = new Document(); Field f1 = new
* Field("bookNumber","003",Field.Store.YES, Field.Index.TOKENIZED);
* Field f2 = new Field("bookname","钢铁是怎样炼成的",Field.Store.YES,
* Field.Index.TOKENIZED); Field f3 = new
* Field("publishdate","1970-01-01",Field.Store.YES,
* Field.Index.TOKENIZED); doc1.add(f1); doc1.add(f2); doc1.add(f3);
* Document doc2 = new Document(); f1 = new
* Field("bookNumber","001",Field.Store.YES, Field.Index.TOKENIZED);
* f2 = new Field("bookname","钢铁是怎样炼成的2",Field.Store.YES,
* Field.Index.TOKENIZED); f3 = new
* Field("publishdate","1990-01-01",Field.Store.YES,
* Field.Index.TOKENIZED); doc2.add(f1); doc2.add(f2); doc2.add(f3);
* Document doc3 = new Document(); f1 = new
* Field("bookNumber","004",Field.Store.YES, Field.Index.TOKENIZED);
* f2 = new Field("bookname","钢铁是怎样炼成的4",Field.Store.YES,
* Field.Index.TOKENIZED); f3 = new
* Field("publishdate","1980-01-01",Field.Store.YES,
* Field.Index.TOKENIZED); doc3.add(f1); doc3.add(f2); doc3.add(f3);
*
* Document doc4 = new Document(); f1 = new
* Field("bookNumber","004",Field.Store.YES, Field.Index.TOKENIZED);
* f2 = new Field("bookname","钢铁是怎样炼成的4",Field.Store.YES,
* Field.Index.TOKENIZED); f3 = new
* Field("publishdate","1970-01-01",Field.Store.YES,
* Field.Index.TOKENIZED); doc4.add(f1); doc4.add(f2); doc4.add(f3);
*
*
* File file = new File("d://demo"); Analyzer luceneAnalyzer = new
* StandardAnalyzer(); IndexWriter writer = new IndexWriter(file,
* luceneAnalyzer, true); writer.setUseCompoundFile(true);
* writer.optimize(); writer.addDocument(doc1);
* writer.addDocument(doc2); writer.addDocument(doc3);
* writer.addDocument(doc4); writer.close();
*/
IndexSearcher search = new IndexSearcher("d://demo");
String field = "bookname";
String queryStr = "钢铁";
QueryParser parser = new QueryParser(field, new StandardAnalyzer());
Query q = parser.parse(queryStr);
//上面的查询是通过QueryParser来查询,下面通过SORT来进行排序,排序规则是首先根据bookNumber来排序,然后再根据publishdate来排序,第二个参数表示该字段是什么类型,第三个字段表示排列顺序(FALSH:升序,TRUE:降序)
Sort sort = new Sort();
SortField f1 = new SortField("bookNumber", SortField.INT, false);
SortField f2 = new SortField("publishdate", SortField.STRING, false);
sort.setSort(new SortField[] { f1, f2 });
//如果指定多个FIELD来进行排序,就把多个FIELD组合成数据塞到SORT中
Hits hits = search.search(q, sort);
System.out.println(q.toString());
for (int i = 0; i < hits.length(); i++) {
Document doc = hits.doc(i);
System.out.println("书名:" + doc.get("bookname") + "\t\t");
System.out.println("书号:" + doc.get("bookNumber"));
System.out.println("出版日期:" + doc.get("publishdate"));
System.out.println("#####################");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
SortField提供的FIELD的类型:string,int,float.指定FIELD的类型对排序过程的效率有巨大的影响。
发表评论
-
使用Lucene-Spatial实现集成地理位置的全文检索
2015-05-27 17:33 1344Lucene通过Spatial包提供了对基于地理位置的 ... -
Lucene4.10.2开发之高亮显示
2015-05-05 23:13 603转载请注明,原创地址,谢谢配合! http://qindo ... -
bobo-browse
2011-02-10 10:22 2811bobo-browse 是一款用java写的lucene扩展组 ... -
Lucene 2 通过updateDocument更新索引
2010-12-30 15:47 2067package com.lucene; i ... -
Lucene 3建立索引和查询索引详解
2010-12-22 23:02 1848public void index() throws Corr ... -
Lucene3 查询索引
2010-12-22 22:46 1779package lucene3; import java.i ... -
Lucene3 建立索引
2010-12-22 22:25 1409Lucene3在建立索引的API上有比较大的变化。直接上程序: ... -
Lucene 3.0的简单解析及变化
2010-12-22 21:59 1148一、 概述 Lucene3 ... -
Lucene分词器之庖丁解牛
2010-12-22 07:47 3499注意:这里配置环境变量要重新启动系统后生效 我现在测试 ... -
Lucene从结果中取出数据
2010-12-21 20:23 1238有些应用,比如我们首先要搜索一个Person的索引文件,然后通 ... -
Lucene过滤器
2010-12-21 20:05 3799有的应用有些要求,对于某类型的内容即使满足条件了,但是也不能被 ... -
Lucene对于短语匹配查询的用法
2010-12-21 17:41 1386通常对于ID查询或者是比较确定字段内容的查询,我们就用: T ... -
Lucene 搜索方法(模糊搜索)
2010-12-20 11:54 3523LUCENE提供了一种模糊搜 ... -
Lucene 搜索方法(多短语搜索)
2010-12-20 11:42 1198短语搜索解决了短语搜索的问题,在很多情况下,用户输入某个关键字 ... -
Lucene 搜索方法(短语搜索)
2010-12-20 11:15 1831用户在搜索的时候,更多的情况是输入一个以上的关键字,这些关键字 ... -
Lucene 搜索方法(前缀搜索)
2010-12-20 10:27 1891PrefixQuery是一种前缀搜索,在检索的时候,常常需要进 ... -
Lucene 的索引读取工具(IndexReader)
2010-12-19 23:00 1617Lucene有一个很重要的工具IndexReader负责对索引 ... -
Lucene 搜索方法(范围搜索)
2010-12-19 22:54 1298在某些情况下,用户需要查找一定范围内的文档,比如时间,ID等。 ... -
Lucene 搜索方法(布尔搜索)
2010-12-19 22:04 1626布尔搜索: 布尔查询的对象中,包含一个子句的集合。各种子句间都 ... -
Lucene 搜索方法(词条搜索)
2010-12-19 21:15 1266词条搜索是LUCENE最为简单的一种搜索方式,通过对某个固定的 ...
相关推荐
在这个话题中,我们将深入探讨如何根据特定的业务需求对搜索结果进行定制排序。 首先,我们要明白 Lucene 默认的排序机制。默认情况下,Lucene 搜索结果是按照文档的相关性(即查询评分)进行排序的。这个评分是...
在信息检索系统中,用户可能希望根据多个字段来过滤和排序结果,例如,搜索一个用户时,可能同时关注其用户名、电子邮件和描述。Lucene支持这种多字段查询,你可以通过构建复杂的Query对象来实现。例如,可以创建一...
- **Hits**:存储查询结果的集合,按相关性排序,方便结果展示和处理。 5. **查询类型**: - **TermQuery**:是最基本的查询类型,用于精确匹配单个词,大小写敏感。可以通过TermQuery构造函数或者QueryParser...
- 聚合(Faceting)功能可以对搜索结果进行分类统计,例如按商品类别或价格区间。 - 近实时搜索(Near Real Time Search)允许在索引更新后几乎立即看到变更。 Lucene的强大之处在于其灵活性和可扩展性,开发者可以...
首先,Lucene 4.3引入了对地理空间搜索的支持,这允许我们根据地理位置坐标对文档进行排序。这种功能在许多现代应用中非常实用,比如地图应用、本地搜索服务或任何需要按地理位置相关性展示结果的场景。 要实现按...
然而,在实际应用中,我们往往需要根据其他因素(如时间、价格、用户评分等)对搜索结果进行排序。这就需要我们了解如何自定义排序。 自定义排序在Lucene中主要通过`Sort`类来实现。`Sort`对象允许我们指定一系列的...
当用户发起搜索时,Lucene会计算每个匹配文档的TF-IDF值,并按照这个值的大小对搜索结果进行降序排列,使得最相关的文档排在前面。 然而,有时候我们可能需要根据关键词在文档中出现的次数来进行排序,这可以通过...
- **缓存 (Caching)**:为了提高查询性能,可以对频繁使用的查询结果进行缓存。 - **预分析 (Analyzer)**:选择合适的分词器(Analyzer)对查询词进行预处理,确保与索引中的处理方式一致。 - **过滤器 (Filtering...
它提供了完整的搜索功能,包括分析、索引、查询以及结果排序等。在Java开发中,Lucene 提供了丰富的API来简化这些操作。以下是关于使用Lucene实现索引查询的详细知识: ### 一、创建索引 创建索引是Lucene的核心...
Lucene 排序算法是搜索引擎中的核心组件之一,负责将搜索结果按照相关度排序以便用户快速找到所需信息。 Lucene 的排序算法主要基于 tf-idf 模型,以下是 Lucene 排序算法的详细介绍: 1. tf(Term Frequency):...
- 结果排序(Sorting):根据评分对匹配到的文档进行排序,返回最相关的文档。 项目中,用户可以输入查询,代码将执行这些步骤并返回匹配的文档列表。 **3. Lucene与Java** Lucene最初是用Java编写的,因此在Java...
在这个主题中,我们将深入理解如何在Lucene 5中对搜索结果进行排序,以便提供更符合用户需求的检索体验。 **描述分析:** 虽然描述部分是空的,但我们可以根据常规的博客结构来推测内容。通常,这样的博客会涵盖...
排序是Lucene中的一项核心功能,允许我们根据文档的某个或多个字段来对搜索结果进行定制化排序。Lucene支持两种类型的排序:基于评分(Score Sorting)和基于字段(Field Sorting)。基于评分的排序默认按照相关性...
在这个主题中,我们将深入探讨如何利用Lucene对数据库中的数据进行索引和查询。 首先,我们需要理解Lucene的工作原理。Lucene通过分析文本,将其拆分为关键词(称为术语或tokens),然后创建一个倒排索引,这个索引...
- **排序与评分**:根据相关性(如TF-IDF)对结果进行排序,可以自定义评分函数。 - **过滤与聚合**:通过Filter和QueryWrapperFilter实现特定条件筛选,如价格区间、品牌筛选等。 - **分页与翻页**:限制每次返回的...
【Lucene 结果排序原理】 Lucene 是一个流行的全文搜索引擎库,其结果排序是通过复杂的算法来实现的,旨在提供最相关的搜索结果。这一过程基于信息检索系统的“相关排序”概念,即根据文档与查询之间的相关性来排列...
查询时,系统可以根据用户的查询条件,利用Lucene进行分词查询,并返回结果。同时,系统还可以后台实时统计单词频率,更新重点单词列表。对于重点句子的识别,可以分析每个文档中包含重点词的句子,根据上下文相关性...
在查询执行阶段,我们通过`IndexSearcher`对预构建的索引进行查询,获取匹配的文档。`search()`方法返回的是`TopDocs`对象,它包含了匹配文档的分数和排序信息。 2. **分页查询的基本原理** 分页查询的关键在于...
- **排序**:通过调整查询参数,可以基于文档的相关度、发布日期或其他自定义字段对结果进行排序。 - **分页**:为了提高用户体验,搜索引擎通常会限制每次返回的结果数量,实现分页展示,如每页10条记录。 - **...