- 浏览: 199711 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
cyp890813:
多张报表打印成一个pdf文件,通过exportParamete ...
在Struts2中使用JasperReports生成报表 -
sp42:
哈哈 当年我翻译的文章
ext入门 -
yuexingchen2:
为什么我调用dao的时候,一直提示空指针异常?
spring2.5注释配置SqlMapClientDaoSupport -
beiyeren:
很好,谢谢
jsp2.0标记文件(tag)详解 -
hutengfei0701:
如果生成的报表HTML上还需要加入几个按钮之类的,怎么做? s ...
在Struts2中使用JasperReports生成报表
Lucene是Java领域最出色的全文搜索引擎,然而其API比较复杂,并且有严格的线程同步模型,直接使用不易。Compass则是封装了Lucene的一个OSEM:Object-SearchEngine Mapping,与Hibernate封装JDBC类似,然而过于复杂,支持的Lucene版本较低,在www.javaeedev.com发现雪峰开发一个类似Compass的简单封装Lucene的全文搜索框架,支持最新版本Lucene和Java 5泛型代码,用户通过简单的代码即可对自定义Bean进行搜索:
List<T> list = Searcher.search(Class<T>, String q, Page page);
下载地址:
http://code.google.com/p/lightweight-search/downloads/list
下面介绍下简单的用法:
1.自定义Bean,例如:Article
import com.javaeedev.lightweight.search.Index;
import com.javaeedev.lightweight.search.SearchableId;
import com.javaeedev.lightweight.search.SearchableProperty;
import com.javaeedev.lightweight.search.Store;
/**
* Article bean that can be searched.
*
* @author Xuefeng
*/
public class Article {
private String id;
private String title;
private String author;
private String content;
@SearchableId
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@SearchableProperty(store=Store.YES, index=Index.TOKENIZED, boost=3.0f)
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@SearchableProperty(store=Store.YES, index=Index.TOKENIZED, boost=2.0f)
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@SearchableProperty(store=Store.YES, index=Index.TOKENIZED)
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
其中特别的地方就是@SearchableId和@SearchableProperty
@SearchableId是描述lucene索引的ID
@SearchableProperty是描述lucene索引域的
以上二属性的详细信息请查询lucene,应为此框架的原理仅仅是对lucene的封装。
2.实现全文全文搜索
有两种方法:
一 直接用行,所需参数在调用类中配置,例如:
import com.javaeedev.lightweight.common.Page;
import com.javaeedev.lightweight.search.Searcher;
import com.javaeedev.lightweight.search.SearcherProvider;
/**
* Run directly.
*
*/
public class Run {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
// define classes that can be searched:
Set<Class> searchableClasses = new HashSet<Class>();
searchableClasses.add(Article.class);
// init a provider:
SearcherProvider provider = new SearcherProvider("./index-location", searchableClasses);
provider.setAnalyzer(new StandardAnalyzer());
provider.setHighlightPre("<b>");
provider.setHighlightPost("</b>");
// get a searcher:
Searcher searcher = provider.get();
// now do all search work with "searcher" object:
// first add new Articles:
Article a = new Article();
a.setId(UUID.randomUUID().toString());
a.setTitle("How to use lightweight search?");
a.setAuthor("Liao Xuefeng");
a.setContent("Lightweight search project is an open source project that using Lucene but simplify full text search.");
searcher.index(a);
// now search:
Page page = new Page(1);
List<Article> articles = searcher.search(Article.class, "lightweight", page);
System.out.println("Results: " + page.getTotalCount());
for(Article article : articles) {
System.out.println(article.getTitle() + " by " + article.getAuthor());
}
}
}
(注意:请注意其代码中的注释部分)
二 借助于Guice注入(相关Guice的资料)
借助于Guice注入,首先要做的就是初始化Guice
import com.google.inject.Module;
import com.google.inject.name.Names;
import com.javaeedev.lightweight.search.Searcher;
import com.javaeedev.lightweight.search.SearcherProvider;
/**
* Init Google Guice IoC Container.
*
*/
public class MyModule implements Module {
@SuppressWarnings("unchecked")
public void configure(Binder binder) {
binder.bindConstant().annotatedWith(Names.named("HighlightPre")).to("<span class=\"highlight\">");
binder.bindConstant().annotatedWith(Names.named("HighlightPost")).to("</span>");
binder.bindConstant().annotatedWith(Names.named("IndexLocation")).to("./index-location");
Set<Class> set = new HashSet<Class>();
set.add(Article.class);
binder.bind(new Key<Set<Class>>(Names.named("SearchableClasses")) {}).toInstance(set);
binder.bind(Analyzer.class).to(StandardAnalyzer.class).asEagerSingleton();
binder.bind(Searcher.class).toProvider(SearcherProvider.class).asEagerSingleton();
}
}
其次创建调用
import java.util.List;
import java.util.UUID;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.javaeedev.lightweight.common.Page;
import com.javaeedev.lightweight.search.Searcher;
/**
* Run demo with Google Guice as IoC container.
*
* @author Xuefeng
*/
public class RunWithGuice {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MyModule());
Searcher searcher = injector.getInstance(Searcher.class);
// now do all search work with "searcher" object:
// first add new Articles:
Article a = new Article();
a.setId(UUID.randomUUID().toString());
a.setTitle("How to use lightweight search?");
a.setAuthor("Liao Xuefeng");
a.setContent("Lightweight search project is an open source project that using Lucene but simplify full text search.");
searcher.index(a);
// now search:
Page page = new Page(1);
List<Article> articles = searcher.search(Article.class, "lightweight", page);
System.out.println("Results: " + page.getTotalCount());
for(Article article : articles) {
System.out.println(article.getTitle() + " by " + article.getAuthor());
}
}
发表评论
-
ID Generator算法
2011-11-24 16:14 1905算法:7位集群+40位时间戳+7位每秒最大生产个数数 适用于 ... -
The+Definitive+ANTLR+Reference--Building+Domain+Specific+Languages
2011-04-22 17:25 1461antlr 教程 -
rishi-core框架
2010-09-16 01:19 1144http://code.google.com/p/rishi- ... -
Weak Reference
2010-09-04 14:36 8215最近看下Guice源码, p ... -
新一代的造神运动--云计算
2010-07-23 10:56 0这年头求真的是越来越少,寻觅嚼头的是越发之多。 当我在怀疑马云 ... -
jvm性能优化
2010-04-01 17:48 1624jvm性能优化: 堆栈模型 堆栈生命周期 ... -
Url Rewrite Filter 简单教程
2008-11-02 12:59 1988Url Rewrite Filter 是一个基于java的 U ... -
通过服务器的404文件没有找到的错误处理,实现url rewrite的功能
2008-11-02 12:46 1669例如:http://www.java2000.net/f29 ... -
list 排序java代码
2008-04-24 04:49 7297常常遇到数组排序的问题.比如我有一个Person类,它的实例对 ... -
加密算法
2008-03-25 10:59 1122懒的打字,代码很简单: package org.taotao. ... -
Java中static块
2008-03-12 09:45 11588Java 程序中时常用些 static {} 这样的结构。 这 ... -
配置全局错误处理页面
2008-02-27 13:18 3074当jsp程序出现异常时,往往是直接输出到浏览器页面上的,这样以 ... -
jsp2.0标记文件(tag)详解
2008-02-26 15:55 8359最近一直在研究ext,偶 ... -
Java Socket 编程
2008-02-26 15:10 1181事实上网络编程简单的理解就是两台计算机相互通讯数据而已。对于程 ... -
Java Annotation注释语法(三)
2008-02-26 14:40 4344这样说来,annotation到底能起什么作用呢?1, ... -
Java Annotation注释语法(二)
2008-02-26 14:34 2807自定义 Java Annotation Annotation ... -
Java Annotation注释语法
2008-02-26 14:31 6945JAVA从J2SE5开始提供名为annotation(注释,标 ... -
Java/J2EE中文问题终极解决之道
2008-02-26 14:14 999Java中文问题一直困扰着 ...
相关推荐
在这个超轻量级框架中,设计可能会包括以下特点: - **简单的路由机制**:控制器如何响应HTTP请求可能是通过注解定义的,例如,使用`@RequestMapping`来关联URL路径和处理方法。 - **自动的依赖注入**:框架可能...
其中,Biny脱颖而出,它是一款由腾讯开源的高性能、超轻量级PHP框架,专为快速构建现代Web应用程序而设计。Biny以其简洁优雅的代码和易于理解的架构,吸引了许多开发者的眼球。 **框架概述** Biny遵循经典的MVC...
PHP实例开发源码—BroPHP框架 免费开源的超轻量级PHP框架正式版.zip PHP实例开发源码—BroPHP框架 免费开源的超轻量级PHP框架正式版.zip PHP实例开发源码—BroPHP框架 免费开源的超轻量级PHP框架正式版.zip
这个框架的核心特性体现在其超轻量级的设计,使得它在资源消耗和性能优化方面表现出色。在这款框架中,你可以发现许多现代Web开发的最佳实践,例如MVC(模型-视图-控制器)架构模式、路由系统、依赖注入等。 1. MVC...
9. **性能优化**:BroPHP的超轻量级设计意味着它有较低的内存占用和较快的执行速度。同时,框架允许开发者通过缓存策略进一步提升性能,例如使用文件缓存或Memcached、Redis等内存缓存。 10. **社区与文档**:作为...
总的来说,"C# MVC+layui.js超轻量级框架(包含数据库)"提供了一个开箱即用的解决方案,适合初学者和有一定经验的开发者快速搭建功能完善的Web应用。通过C# MVC的后端控制和layui.js的前端呈现,结合SQLSugar的...
iOS 超轻量级框架 MJExtension ,MJExtension 是 JSON 和模型之间最快捷方便的转换。
在MiniFramework中,开发者可以轻松实现应用的分层结构,将业务逻辑、数据处理和用户界面分离,从而更好地管理和维护代码。 **MVC模式详解:** MVC模式是软件工程中一种广泛使用的架构模式,用于组织和分离应用程序...
1. **轻量级设计**:BroPHP框架的轻量化设计使得它在项目初期就能快速上手,降低了学习曲线,特别适合小型和中型项目。这种设计理念让开发者能更专注于业务逻辑,而非框架本身的复杂性。 2. **MVC模式**:BroPHP...
BroPHP作为一款超轻量级框架,它的核心特性主要体现在以下几个方面: 1. **路由系统**:BroPHP框架采用直观的路由定义方式,允许开发者通过简单的规则来处理HTTP请求,实现URL与控制器方法的映射,方便地管理应用...
QP-nano是一个针对嵌入式系统的超轻量级开源实时嵌入式框架(RTEF),专门设计用于构建异步、事件驱动的活动对象系统。这个框架的核心理念是利用活动对象(Active Object)的设计模式来解决嵌入式软件开发中的并发...
【适合场景】:相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可基于此项目来扩展开发...
"cpp-shineframe高性能超轻量级C++开发库及服务器编程框架"是一个专为C++开发者设计的高效工具,其核心目标是简化在Linux和Windows平台上构建非阻塞、高并发服务器程序的过程。该框架充分利用了C++11的新特性,以...
本文将深入探讨EVM(Embedded Virtual Machine),这是一种专为物联网环境设计的超轻量级虚拟机,它能够在资源受限的单片机上高效运行。 EVM的设计理念是简洁而高效。它采用通用的虚拟机架构,但经过精心优化以适应...
总之,"ios-自定义超轻量级HUD.zip"提供了一个基础的框架,帮助开发者快速实现简单的加载指示或者进度反馈功能,同时保持了代码的简洁性和项目的轻量化。开发者可以根据自身需求对其进行定制和优化,以适应项目的...
stlog用于资源受限设备的超轻量级日志记录框架文档许可证,在Apache许可的2.0版下获得许可stlog用于资源受限设备的超轻量级日志记录框架,文档许可在Apache许可证,版本2.0之下获得许可(LICENSE-APACHE或...
该项目是一款基于Vue3.0的乐聊超轻量级全平台聊天软件设计源码,共包含839个文件。其中,前端开发采用vue3.0、element plus、electron和TypeScript,支持Windows、Linux、Mac、安卓、iOS、小程序及H5平台。软件功能...
一个超轻量级的网络框架 为什么是另一个? 通常,欣赏您的工具的最佳方式是尝试不使用它们。 就像其他几个项目一样,这是我为了更好地理解我使用的工具所做的努力。 哲学 一个框架应该保护你免受两件事的影响: ...
标题中的“一款超轻量级通用人脸检测模型”是指一种专为高效运行设计的人脸检测算法,它在保持高精度的同时显著降低了模型的大小和计算需求。这种模型特别适合资源有限的设备,如边缘计算设备和低算力硬件,以及个人...