使用hibernate search来搜索一个加入索引的信息时,可以组合多个搜索条件进行灵活搜索:
方式一:
package org.edu.scut.lab24.uam.dao.impl;
import java.util.List;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryParser.MultiFieldQueryParser;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.BooleanClause;
import org.apache.lucene.search.BooleanQuery;
import org.edu.scut.lab24.uam.hibernate.Posts;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
public class searchTest {
/**
* 从多个字段里进行组合搜索
* @param objectPK
* 必段首先满足的字段(如搜索一个社区的帖子,那先得满足这个帖子为所指定的社区的ID)搜索
* @param content
* 其次满足的内容搜索
* @throws Exception
*/
//下面方法都是没有考虑自己开启事务,是建立在调用该方法会开启事务的基础上
public void mySearch1(String objectPK , String content) throws Exception{
FullTextSession fullTextSession = Search.createFullTextSession(getSession());//这个要从你的支持开启session的地方获取,如继承了HibernateDaoSupport的类里面就帮我们开启session的
String[] properties = new String[] { "title", "description", "post_user_username" };//在字段"title", "description", "post_user_username"中进行搜索
StandardAnalyzer analyzer = new StandardAnalyzer();
MultiFieldQueryParser parser = new MultiFieldQueryParser(//MultiFieldQueryParser这样使用是表示一个查询条件在多个字段里进行查询
// 这个是用户输入的的搜索串在下面的field里进行搜索
properties,
analyzer);
parser.setDefaultOperator(QueryParser.OR_OPERATOR);
BooleanQuery booleanQuery = new BooleanQuery();//用BooleanQuery来做搜索条件的组合,即多条件查询
booleanQuery.add(parser.parse(content), BooleanClause.Occur.MUST);
QueryParser parser2 = new QueryParser("post_obj_objectID", analyzer);// 从指定的ID里搜索,也就是首先在满足这个条件,再去搜索用户输入的查询串
booleanQuery.add(parser2.parse(objectPK), BooleanClause.Occur.MUST);
QueryParser parser3 = new QueryParser("isReply",analyzer);//第三个要满足的条件,还可以继续添加更多的条件
booleanQuery.add(parser3.parse("0"),BooleanClause.Occur.MUST);
FullTextQuery hibQuery = fullTextSession.createFullTextQuery(booleanQuery, Posts.class);
System.out.println("搜索的结果数:" + hibQuery.getResultSize());
List result = hibQuery.list();//用这个方法可以返回所有搜索的结果对象
}
}
方式二
public void mySearch2(String objectPK , String content){
FullTextSession fullTextSession = Search.createFullTextSession(getSession());//这个要从你的支持开启session的地方获取,如继承了HibernateDaoSupport的类里面就帮我们开启session的
String[] properties = new String[] { "post_obj_objectID", "title" , "isReply"};
Query luceneQuery = MultiFieldQueryParser.parse(new String[] { objectPK,
content , "0"}, properties,
new BooleanClause.Occur[] { Occur.MUST, Occur.MUST,Occur.MUST},
new StandardAnalyzer());//MultiFieldQueryParser这样使用是表示多个查询条件对应在多个字段里进行查询
FullTextQuery hibQuery = fullTextSession.createFullTextQuery(luceneQuery,
Posts.class);
System.out.println("搜索的结果数:" + hibQuery.getResultSize());
List result = hibQuery.list();//用这个方法可以返回所有搜索的结果对象
}
方式三
分享到:
相关推荐
《Hibernate Search in Action》这本书深入探讨了Hibernate Search这一强大的全文搜索引擎集成框架,它将全文搜索功能无缝地融入到Java持久层框架Hibernate之中。通过利用Lucene库的强大功能,Hibernate Search为...
Hibernate Search是Hibernate ORM的一个扩展,它将全文搜索的功能集成到Java应用中,使得在大量数据中进行高效、精准的检索成为可能。 本书首先会介绍Hibernate Search的基本概念,包括什么是全文搜索引擎、如何与...
Hibernate Search,作为Hibernate ORM框架的一个强大扩展,为Java开发者提供了一种在持久化数据上进行全文搜索的能力。这个3.4.0.Final版本是Hibernate Search历史上的一个重要里程碑,它在功能、性能和稳定性上都...
Hibernate Search,作为Hibernate ORM的一个扩展,提供了在Java应用中进行全文搜索和复杂索引的能力。这个压缩包“hibernate-search-5.5.1.Final-dist.zip”包含了Hibernate Search 5.5.1.Final版本的所有组件,是...
Hibernate Search是基于Hibernate ORM的扩展,它提供了一种声明式的方式来索引和搜索数据库中的数据。通过使用这个库,开发者可以轻松地在数据库中执行全文搜索,同时享受到Hibernate带来的便捷性。5.1.1.Final是...
《Hibernate Search 4.2.0:全文搜索与对象关系映射的完美结合》 Hibernate Search是Hibernate ORM框架的一个扩展,它将强大的全文搜索引擎Lucene集成到Java应用程序中,允许开发者在数据库对象上进行复杂的全文...
5. **查询API**:Hibernate Search提供了一套丰富的查询API,如`FullTextQuery`和`QueryBuilder`,可以创建布尔组合查询、模糊查询、短语查询等。例如,我们可以使用`keyword()`函数构建简单查询,或者用`match()`来...
这个版本不仅包含了对Java Persistence API(JPA)的支持,还兼容传统的Hibernate ORM,使得开发者无论选择哪种持久化方式都能享受到全文搜索的便利。 2. **主要特性** - **全文索引**:Hibernate Search能够自动...
《Hibernate Search In Action》这本书是关于Java开发中Hibernate Search框架的深入指南,它涵盖了这个强大的全文搜索引擎集成工具的各个方面。Hibernate Search允许开发者在Java应用程序中实现高效、灵活的全文搜索...
Apache Shiro + SpringMVC + Hibernate Search + Hibernate + Bootstrap企业信息管理系统基础框架搭建整合实例代码教程,这是一个典型的Java Web开发中的技术栈组合,用于构建高效、安全的企业级信息系统。...
Hibernate Search是Java世界中一款强大的全文搜索引擎,它是Hibernate ORM框架的一个扩展,能够将数据库中的数据转换为可搜索的索引,从而实现高效的全文搜索功能。在最新的版本3.3.0.Final中,Hibernate Search...
Hibernate Search是Hibernate ORM的一个扩展,它提供了一种在Java应用中实现全文搜索功能的方式,使得开发者能够轻松地在数据库中的数据上执行复杂的全文检索。4.3.0.Final是Hibernate Search的一个稳定版本,包含了...
《深入理解Hibernate Search 4.1.0.CR2:Java持久化搜索的革新》 Hibernate Search是Hibernate ORM框架的一个扩展,它将全文搜索引擎的功能引入到Java应用中,使得开发者能够轻松地在数据库中进行复杂的文本搜索。...
4. 高级查询:提供布尔组合查询、范围查询、近似查询等多种高级查询方式,如使用`BooleanQuery`、`NumericRangeQuery`等。 5. 排序和评分:可以基于各种因素(如相关性、距离等)对搜索结果进行排序和评分。 6. 分页...
SSH整合Hibernate是一个常见的Java Web开发框架组合,它结合了Struts、Spring和Hibernate三大开源框架的优势,用于构建高效、灵活且可维护的Web应用程序。在这个整合中,Hibernate作为持久层框架,负责对象关系映射...
Hibernate搜索描述全文搜索Java对象该项目提供了由Hibernate ORM管理的实体与诸如Apache Lucene和Elasticsearch之类的全文索引服务之间的同步。 它将自动将更改应用于索引,这是繁琐且容易出错的编码工作,同时使您...
`hibernate-search-orm.jar`提供了全文搜索功能,基于Lucene或其他搜索引擎;`hibernate-c3p0.jar`是集成C3P0连接池的模块,可以提高数据库连接的效率和管理。 这些jar包的组合使用,可以帮助开发者构建一个完整的...
在实际应用中,Hibernate Search支持多种查询方式,包括简单的关键词匹配、布尔组合查询、模糊查询、范围查询等。此外,还可以通过`@Highlight`注解实现高亮显示搜索结果中的匹配部分,提高用户体验。 HSiA-1.0.0...
- Hibernate Search提供了强大的全文搜索功能。 - 可以通过构建Lucene查询或Hibernate Search查询来实现复杂的查询需求。 #### 四、分析器(Analyzer) 1. **分析器定义**: - 分析器用于控制文本的解析和索引...
在Java Web开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它简化了数据库操作,使得开发者能够以面向对象的方式处理数据。SSH(Struts、Spring、Hibernate)是经典的三大框架组合,其中Hibernate负责...