`
billgmh
  • 浏览: 65483 次
  • 性别: Icon_minigender_1
  • 来自: 广东广州
社区版块
存档分类
最新评论

初试Hibernate Search

阅读更多

不久前Hibernate推出了Hibernate Search 3.0 GA,由它的名字大家也可以大概猜到它的作用是对数据库中的数据进行检索的。它是hibernate对著名的全文检索系统Lucene的一个集成方案,作用在于对数据表中某些内容庞大的字段(如声明为text的字段)建立全文索引,这样通过hibernate search就可以对这些字段进行全文检索后获得相应的POJO,从而加快了对内容庞大字段进行模糊搜索的速度(sql语句中like匹配)。

Hibernate Search运行的环境如下:

1、JDK或JRE 5.0以上

2、Hibernate-Search以及相应的依赖包

3、Hibernate Core 3.2.X

4、Hibernate Annotations 3.3.X

一、配置

使用过Lucene的人都知道,Lucene是使用Directory这个概念来存储索引文件的,所以在Hibernate Search中提供了一个初始化、配置化的工厂类DirectoryProvider来生成相应的Directory。而在这里,我使用了FSDirectoryProvider这个工厂类,其中FS代表文件系统,意思是索引文件保存在文件系统中。因此,我们在hibernate.cfg.xml文件中加入了一下内容:

xml 代码
  1. <property name="hibernate.search.default.directory_provider">  
  2.           org.hibernate.search.store.FSDirectoryProvider   
  3. </property>  
  4. <property name="hibernate.search.default.indexBase">  
  5.           E:/temp/index   
  6. </property>  

其中属性hibernate.search.default.indexBase代表索引文件默认的保存位置。

这些属性设置完成后,接下来就是使用Annotation对指定POJO的指定属性进行配置了。如下:

java 代码
  1. @Indexed(index = "text")   
  2. public class Text implements java.io.Serializable   
  3. {   
  4.     @DocumentId  
  5.     private Integer id;   
  6.   
  7.     private String fileName;   
  8.   
  9.     private String filePath;   
  10.   
  11.     @Field(name = "content", store = Store.NO, index = Index.TOKENIZED, analyzer = @Analyzer(impl = ChineseAnalyzer.class))   
  12.     private String content;   
  13.   
  14.     ......   
  15. }  

其中@Indexed用于标示需要建立全文索引的实体类,它包含一个属性index用于标示这个全文索引的名字

@DocumentId用于标示实体类中的唯一的属性保存在索引文件中,是当进行全文检索时可以这个唯一的属性来区分索引中其他实体对象,一般使用实体类中的主键属性

@Field就是用来标示Lucene的Field字段,其中name属性用于标示Field的名称,store属性用于标示这个属性的内容是否需要保存在索引中,index属性标示该字段属性是否进行分词(Index.TOKENIZED),analyzer用于标示建立索引时所使用的分析器是什么类,这里使用Lucene自带的ChineseAnalyzer

分享到:
评论
21 楼 qinliyi123 2008-09-24  
我也在测试spring和hibernate search的结合,但是在我配置及代码都没有问题,就是不出现查询结果,郁闷的很??很想请教一下啊??
我的联系方式是qinliyi123@sina.com
qq  354109045

望回复!!谢谢
20 楼 billgmh 2008-05-10  
test_root 写道
如果我的数据库英字符集的,中文内容保存后都是乱码,
我该如何实例化org.apache.lucene.queryParser.QueryParser,及如何调用
parser.parse()方法?
谢谢


        QueryParser parser = new QueryParser("content", new ChineseAnalyzer());
        parser.setPhraseSlop(0);

        Query query = fullTextSession.createFullTextQuery(parser.parse(word),
                Text.class);
19 楼 test_root 2008-05-04  
如果我的数据库英字符集的,中文内容保存后都是乱码,
我该如何实例化org.apache.lucene.queryParser.QueryParser,及如何调用
parser.parse()方法?
谢谢
18 楼 test_root 2008-05-04  
请问用hibernate search后,如何实现分页?
能把相关的分页代码贴出来吗?
17 楼 andy54321 2008-02-21  
太缺乏项目经验了,

这么多达人,看这些东西好像还有些懵懂的意思

一直想做点什么,真是的。。。。。。

16 楼 neptune 2008-02-18  
还是compass好一些
15 楼 billgmh 2008-02-12  
魔力猫咪 写道
请问在JPA的情况下可以使用吗?Search的注释和JPA注释放在一起会有问题吗?看到例子里用的是专用注释,没有使用JPA的标准注释。


是可以使用的,HS的Annotation是用于配置那些列需要建立索引是不影响JPA的Annotation的。
14 楼 魔力猫咪 2008-01-22  
请问在JPA的情况下可以使用吗?Search的注释和JPA注释放在一起会有问题吗?看到例子里用的是专用注释,没有使用JPA的标准注释。
13 楼 ivan 2008-01-22  
<div class='quote_div'>要使用Hibernate Search的功能就不能单纯使用平常的Session来开始事务,进行数据库操作,而是应该改用FullTextSession</div> 这是错的,只是在搜索的时侯才需要FullTextSession,其他时侯原来咋样还是咋样。
12 楼 heweiya 2007-12-27  
简单就是compass的盗版一样,不知道他是如何支持分词的.
11 楼 jsjzmxx 2007-12-21  
用replace转换一下不就可以了啊
10 楼 billgmh 2007-10-25  
hua0424 写道
8楼的意思是说,对“有一只小鸟(进行)捕食”进行搜索,用关键字"小鸟(进行)"可以查到结果,但是全角括号"小鸟(进行)"就查不到结果,因为后者的"进行"两边是全角的括号


个人感觉,那是由于Luecene自带的中文分词部件功能并不完善,不能对中文很好的支持而已导致,不知我的理解有没有错
9 楼 hua0424 2007-10-25  
8楼的意思是说,对“有一只小鸟(进行)捕食”进行搜索,用关键字"小鸟(进行)"可以查到结果,但是全角括号"小鸟(进行)"就查不到结果,因为后者的"进行"两边是全角的括号
8 楼 billgmh 2007-10-24  
imcaptor 写道
我下载测试了一把,使用象"小鸟(进行)"可以查到结果,但是全角括号"小鸟(进行)"就查不到结果,如何让中文括号也能找到结果?
谢谢!


楼上的意思我不是很清楚,可以详细举个例子吗?
7 楼 imcaptor 2007-10-23  
我下载测试了一把,使用象"小鸟(进行)"可以查到结果,但是全角括号"小鸟(进行)"就查不到结果,如何让中文括号也能找到结果?
谢谢!
6 楼 wl95421 2007-10-21  
lucene有HighLighter的扩展包
5 楼 billgmh 2007-10-20  
暂时只实现了数据检索,不知能否加上关键字的定位,从而做到高亮显示,这个是下一步尝试的目标……
4 楼 wenson 2007-10-19  
不知道性能如何?試試看~
3 楼 imcaptor 2007-10-19  
定,下载运行一下,Annotations 以前还没有用过,还是大学生有学习热情啊。
2 楼 billgmh 2007-10-03  
<p>三、检索</p>
<p>接下来就是说一下如何使用全文检索功能来检索实体对象了。</p>
<div class='code_title'>java 代码</div>
<div class='dp-highlighter'>
<div class='bar'/>
<ol class='dp-j'>
    <li class='alt'><span><span>Session session = HibernateUtil.getSession();   </span></span> </li>
    <li class=''><span>FullTextSession fullTextSession = Search.createFullTextSession(session);   </span> </li>
    <li class='alt'><span>  </span> </li>
    <li class=''><span>Transaction tx = fullTextSession.beginTransaction();   </span> </li>
    <li class='alt'><span>  </span> </li>
    <li class=''><span>QueryParser parser = </span><span class='keyword'>new</span><span> QueryParser(</span><span class='string'>"content"</span><span>, </span><span class='keyword'>new</span><span> ChineseAnalyzer());   </span> </li>
    <li class='alt'><span>  </span> </li>
    <li class=''><span>Query query = fullTextSession.createFullTextQuery(parser.parse(word),   </span> </li>
    <li class='alt'><span>        Text.</span><span class='keyword'>class</span><span>);   </span> </li>
    <li class=''><span>  </span> </li>
    <li class='alt'><span>List result = query.list();   </span> </li>
    <li class=''><span/><span class='keyword'>for</span><span> (</span><span class='keyword'>int</span><span> i = </span><span class='number'>0</span><span>; result != </span><span class='keyword'>null</span><span> &amp;&amp; i &lt; result.size(); i++)   </span> </li>
    <li class='alt'><span>{   </span> </li>
    <li class=''><span>    Text pojo = (Text) result.get(i);   </span> </li>
    <li class='alt'><span>    System.out.println(</span><span class='string'>"文件名:"</span><span> + pojo.getFileName());   </span> </li>
    <li class=''><span>    System.out.println(</span><span class='string'>"文件路径:"</span><span> + pojo.getFilePath());   </span> </li>
    <li class='alt'><span>    System.out.println();   </span> </li>
    <li class=''><span>}   </span> </li>
    <li class='alt'><span>  </span> </li>
    <li class=''><span>tx.commit();   </span> </li>
    <li class='alt'><span>fullTextSession.close();  </span> </li>
</ol>
</div>
<p>首先是建立相应的QueryParser由他来对输入的关键字进行切分后产生Lucene下的Query实例,最后通过FullTextSession的createFullTextQuery方法生成hibernate下的Query实例,执行list方法即可获得查询的实例结果集合。</p>
<p>四、完</p>
<p>以上便是今天我对Hibernate Search的一个尝试,属于很基础很基础的入门,希望可以对大家能有一些启发跟帮助,随文附带我的源代码</p>

相关推荐

    Hibernate2.0初试

    根据hibernate文档作的例子/ 包括:测试mysql5.0连接的例子和hibernate应用的例子. 内附note目录:有详尽的说明. 注意: note中有一个错误: TestJDBC执行前,要把web-inf\lib\mysql dirver 复制到Tcomcat中的common\lib...

    csp - j初试模拟卷.docx

    csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟卷.docx csp - j初试模拟...

    基于c++的研究生初试录取管理系统全文件

    【标题】基于C++的研究生初试录取管理系统全文件 本系统是针对研究生初试录取流程而设计的一个管理软件,采用C++编程语言在Visual Studio环境下实现。C++是一种广泛应用的面向对象编程语言,以其高效、灵活性和强大...

    软件工程初试.zip

    《软件工程初试》资料集合是为准备武汉科技大学计算机专业考研初试的考生精心整理的一份宝贵资源。这个压缩包涵盖了三个主要部分:期末考试试卷、历年真题以及模拟预测题,旨在帮助考生全面深入地理解和掌握软件工程...

    大连大学2023年初试科目大纲汇总.rar

    《大连大学2023年初试科目大纲汇总》是一份重要的教育资源,主要涵盖了该校硕士研究生入学考试的各项科目大纲。这份压缩文件的目的是为考生提供清晰的考试范围和学习指南,帮助他们有效地准备初试。以下是根据文件名...

    西南交大初试相关

    在“西南交大初试相关”的压缩包文件中,包含了丰富的学习资料,如PPT和期末考试试卷,这些都是备考的重要资源。 首先,我们来详细探讨电力电子这一主题。电力电子是研究电能转换和控制的科学,它涵盖了电力半导体...

    研究生初试录取管理系统

    - `search()`:未具体实现,可能是用于搜索特定条件下的学生信息。 ### 知识点二:C++面向对象编程的应用 #### 2.1 类与对象的概念 - **类**:一种自定义的数据类型,它包含了一组属性(数据成员)和方法(成员...

    武汉理工初试复试汇总

    【武汉理工初试复试汇总】是一份针对武汉理工大学研究生入学考试的数据结构复习资源包,包含了丰富的学习材料和考试经验分享,旨在帮助考生更好地准备852数据结构这门科目,从而顺利通过初试和复试。 在数据结构的...

    研究生初试录取 c++课程设计

    【研究生初试录取 C++课程设计】是一种编程实践任务,旨在考察学生的编程能力和对研究生入学考试规则的理解。在这个课程设计中,学生需要编写一个C++程序来模拟研究生初试的录取过程,根据设定的分数线来筛选合格的...

    研究生初试C++源代码

    研究生初试cpp文件,可以完成文件操作功能,统计研究生录取结果

    09高校初试排名 09年高校初试排名

    09年高校初试排名09年高校初试排名09年高校初试排名

    应聘人员初试测评表.doc

    在招聘过程中,初试测评表是评估应聘者是否符合岗位要求的重要工具,它能系统地、客观地评估应聘者的各种素质和能力。本测评表主要分为个人基本素质评价、相关的工作经验及专业知识以及录用适合性评价三个部分,下面...

    09多校考研初试成绩排名

    在中国的研究生入学考试(考研)过程中,初试成绩是决定考生能否进入复试的关键因素。"09多校考研初试成绩排名"这个压缩包文件很可能包含的是2009年多所高校考研初试的成绩数据,包括哈工大、浙江大学、大连理工大学...

    研究生初试录取系统 c 课程设计报告

    研究生初试录取系统 C 课程设计报告 本课程设计报告的主要目的是设计一个研究生初试录取系统,旨在统计初试合格的人数,并按总分由高到低的顺序输出合格考生的信息。本系统需要输入考生姓名、准考证号、报考专业、...

    浙大电气初试复试经验

    从给定的文件中,我们可以了解到浙江大学电气考研的初试和复试的一些具体经验和建议。以下是从标题、描述和部分内容中提取的关键知识点。 首先,关于初试经验,文档的作者是来自一所普通985高校电气学院的学生,...

    西安电子科技大学计算机初试复试汇总

    对于准备参加西安电子科技大学计算机初试和复试的学生来说,掌握以下几个关键知识点至关重要: 1. 计算机基础:包括计算机系统结构、操作系统、数据结构、算法设计与分析等基础知识。理解CPU工作原理、内存管理、...

    初试JqueryEasyUI(附Demo)

    在初试 Jquery EasyUI 的 Demo 中,你可以通过阅读 `初试JqueryEasyUI.docx` 和 `初试JqueryEasyUI.mht` 文件了解详细步骤和示例代码。`EasyUIDemo` 文件可能是包含实际演示的 HTML 和 JavaScript 代码,可以运行...

    研究生初试录取信息管理系统

    计算机与通信学院课程设计-研究生初试录取信息管理系统!

Global site tag (gtag.js) - Google Analytics