1 使用hibernate search 时,当你的字段加入了索引,而进行搜索的时候去没搜索出来,那可能是你在实体字体里使用的分词器和作为搜索时使用的分词器不同所造成的,这个要注意一致性。还有一个就是就是可能你分词的时候将词变成乱码,
即由于对中文支持不好造成的,这个也会导致搜索的时候没找出来。
2 使用hibernate search 多字段查询可以如下方式:
StandardAnalyzer analyzer = new StandardAnalyzer();
MultiFieldQueryParser parser = new MultiFieldQueryParser(//这个是用户输入的的搜索串在下面的field里进行搜索
new String[] { "title","description","post_user_username" }, analyzer);
parser.setDefaultOperator(QueryParser.OR_OPERATOR);
BooleanQuery query = new BooleanQuery();
query.add(parser.parse(content),BooleanClause.Occur.MUST);
QueryParser parser2=new QueryParser("post_obj_objectID",analyzer);//从指定的ID里搜索,也就是首先在满足这个条件,再去搜索用户输入的查询串
query.add(parser2.parse(objectPK) , BooleanClause.Occur.MUST);
Query hibQuery = fullTextSession.createFullTextQuery(query,Posts.class);
使用MultiFieldQueryParser类来复合查询域,里面指定要搜索的field,这里是从"title","description",
"post_user_username"三个域里进行搜索,其中,post_user_username这个是在待搜索的实体Posts类里关联的
实体的一个索引域,也就是在Post实体里加入了@IndexedEmbedded(prefix="post_user_", depth=1)注解在关联
的实体(User user;)上,使得,可以从Post里去查询出它的user,那么只要在User实体里一个属性上面加入如下:
@Field(name = "username", index = Index.UN_TOKENIZED, store = Store.YES)形式的信息,便可完成跨
实体的查询。
3 使用FullTextQuery可以返回结果集,如下:
org.hibernate.search.FullTextQuery = hibQueryfullTextSession.createFullTextQuery(luceneQuery,Question.class);
int count = hibQuery.getResultSize();
这样就可以不用先获取一个list所有的对象信息后再求它的size,这样速度会快很多,因为不用对大量对象进行从数据库到的封装。
注:自己是在原来项目里接手做的,由于原来的项目里用的lucene版本比较低(用的是lucene2.4.1,hibernate search是3.1.1),所以有些方法和现在高版本的方法不同。
分享到:
相关推荐
Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...
hibernate的学习笔记,hibernate所以知识点全,一看就能上手........包含代码和书写格式和图片分析~~~~hibernate的学习笔记,hibernate所以知识点全,一看就能上手........包含代码和书写格式和图片分析~~~~...
【hibernate个人学习笔记完整版】是一份详尽的资料,涵盖了Hibernate框架的基础到高级应用,旨在帮助学习者深入理解和掌握这一强大的Java对象关系映射(ORM)工具。Hibernate作为Java开发中的主流ORM框架,它极大地...
《Hibernate学习笔记特别详细》 Hibernate,作为一款开源的Object-Relational Mapping(ORM)框架,为Java开发者提供了强大的数据库操作支持。它简化了数据库访问的复杂性,使得开发人员可以像操作对象一样操作...
Hibernate的学习笔记,希望对各位有一定的帮助。
【一、O/R Mapping】 O/R Mapping,即对象关系映射,是将对象模型与关系数据库之间进行映射的技术。在Hibernate中,O/R Mapping允许开发者以面向对象的方式...学习和掌握Hibernate有助于提升Java应用的数据管理能力。
hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要hibernate 学习笔记精要
《Hibernate3.2学习笔记详解》 在Java开发中,ORM(Object-Relational Mapping)框架如Hibernate极大地简化了数据库操作,使得开发者可以更加专注于业务逻辑而不是底层的数据存取。本篇学习笔记将深入探讨Hibernate...
《Hibernate Annotation 学习笔记》 在Java的持久化框架中,Hibernate以其强大的功能和易用性成为开发者首选之一。而Hibernate Annotation则是Hibernate提供的一种基于注解的实体映射方式,它极大地简化了传统XML...
《传智播客2016 Hibernate框架学习笔记》是一份详实的教程,旨在帮助初学者和进阶者深入理解和掌握Hibernate框架。该资源包含了四天的学习内容,分别是day01、day02、day03和day04,涵盖了从基础到高级的多个主题。...
### hibernate框架学习笔记整理 #### 一、Hibernate框架简介 **Hibernate框架**是一种用于Java应用的**对象关系映射**(Object-Relational Mapping, ORM)解决方案,它允许开发者使用面向对象的方式操作数据库中的表...
**hibernate 3.3学习笔记** 在深入探讨Hibernate 3.3的学习笔记之前,首先需要理解Hibernate是什么。Hibernate是一个强大的开源Java持久化框架,它简化了数据库操作,允许开发者将精力集中在业务逻辑上而不是数据库...
在本篇《Hibernate学习笔记》中,我们将深入探讨Hibernate这一流行的Java对象关系映射(ORM)框架。Hibernate允许开发者以面向对象的方式处理数据库操作,极大地简化了数据存取的复杂性。以下是一些关键知识点: 1....
【hibernate-学习笔记】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中管理关系数据库数据的便捷方式。本学习笔记将深入探讨Hibernate的核心概念、配置、实体映射、查询...
这套笔记是我学习Hibernate,进行相关技术点训练时记录下来的,其中包括技术点说明与相关事例,拿出来与大家分享。
**hibernate入门学习笔记+源码** **一、Hibernate简介** Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用与数据库之间的交互。通过提供对象化的数据访问方式,Hibernate消除了传统JDBC代码中的...