近日需要做一下搜索的功能,之前就听说过hibernate search,所以就决定采用这个。
实现了如下的功能,在多域中搜索关键字,并且在以id排序,满足一些状态值。
而且前台可以再次通过过滤器进行二次筛选。
还需要在以后扩展的是高亮显示关键字,还有分词好像没有实现,对象时间怎么关联起来还没找到相关事例资料。服务器重启会丢失索引文件,现在必须重启服务后手动索引。
//手动建索引
public void createHernateIndex() {
FullTextSession s = Search.createFullTextSession(getSession());
List<Product> products = find("from Product");
long startTime = new Date().getTime();
for (Product product : products) {
System.out.println("File " + product.getProTitle() + "正在被索引....");
s.index(product);
}
long endTime = new Date().getTime();
System.out.println("一共" + products.size() + ",这花费了"
+ (endTime - startTime) + " 毫秒来把文档增加到索引里面去!");
}
//搜索
public Page proQuery(String words,String cartype,String address,int pageNo, int pageSize) throws Exception {
FullTextSession s = Search.createFullTextSession(getSession());
// MultiFieldQueryParser parser = new MultiFieldQueryParser(
// new String[] { "proName" }, new StandardAnalyzer());
// Query luceneQuery = parser.parse(words);
// Query luceneQuery = MultiFieldQueryParser.parse(new
// String[]{words},new String[]{"proName","pro_state"},new
// StandardAnalyzer());
Query luceneQuery = MultiFieldQueryParser.parse(new String[] { words,
words,words }, new String[] { "proTitle", "proDescn","car_type" },
new BooleanClause.Occur[] { Occur.SHOULD, Occur.SHOULD,Occur.SHOULD },
new StandardAnalyzer());
FullTextQuery query = s.createFullTextQuery(luceneQuery, Product.class);
// 排序
Sort sort = new Sort(new SortField[] { new SortField("id",
SortField.INT, true) });
// 过滤1
QueryParser qp1 = new QueryParser("proStatus", new StandardAnalyzer());
Query fquery = qp1.parse("2");
// 过滤2
QueryParser qp2 = new QueryParser("pro_type", new StandardAnalyzer());
Query fquery2 = qp2.parse("3");
BooleanQuery bqf = new BooleanQuery();
bqf.add(fquery, BooleanClause.Occur.MUST);
bqf.add(fquery2, BooleanClause.Occur.MUST_NOT);
// 过滤3
if (!cartype.equalsIgnoreCase("")) {
QueryParser qp3 = new QueryParser("car_type",
new StandardAnalyzer());
Query fquery3 = qp3.parse(cartype);
bqf.add(fquery3, BooleanClause.Occur.MUST);
}
// 过滤4
if (!address.equalsIgnoreCase("")) {
QueryParser qp4 = new QueryParser("proOrigin",
new StandardAnalyzer());
Query fquery4 = qp4.parse(address);
bqf.add(fquery4, BooleanClause.Occur.MUST);
}
QueryFilter qf = new QueryFilter(bqf);
query.setSort(sort);
query.setFilter(qf);
long totalCount = query.list().size();
if (totalCount < 1)
return new Page();
int startIndex = Page.getStartOfPage(pageNo, pageSize);
List<Product> list = query.setFirstResult(startIndex).setMaxResults(
pageSize).list();
return new Page(startIndex, totalCount, pageSize, list);
}
分享到:
相关推荐
标题:hibernate_search.pdf 描述与标签:此文档详细介绍了...通过上述知识点,读者可以全面了解Hibernate Search的功能、架构、配置和使用技巧,从而在实际项目中有效应用全文搜索技术,提升数据检索的准确性和效率。
Hibernate Search 是 Hibernate 的一个扩展,它将 Apache Lucene 集成到 Hibernate ORM 中,使得数据库中的对象可以直接被索引和搜索。通过使用 Hibernate Search,开发者可以利用 Lucene 的强大搜索功能,而无需...
使用hibernate search实现全文检索和文档管理功能: 1 全文检索 2 手动生成索引 3 文档上传(自动建立索引) 4 文档更新(自动建立索引) 5 文档删除 使用说明: 1 需要先恢复数据库 searchDB_2008sqlserver.bak 2 ...
**使用Hibernate Search实现全文...结合Apache Lucene的强大搜索功能,Hibernate Search使得在数据库中进行复杂的文本搜索变得简单易行。在实际项目中,根据业务需求调整索引策略,可以进一步优化搜索性能和用户体验。
实体映射是Hibernate Search的核心功能之一,它将数据库表结构与搜索索引关联起来,使开发者能够在不修改数据库架构的情况下,实现对数据的高效搜索。在映射过程中,你需要定义哪些字段应被索引,以及如何处理这些...
Hibernate Search则是在这个基础上,结合了Lucene搜索引擎,提供了对数据库内数据的全文索引和检索能力,使得搜索功能更加高效和灵活。 在4.5.0.Final版本中,Hibernate Search提供了一系列关键特性: 1. **全文...
- **全文索引**:Hibernate Search能够自动或手动创建和更新对象的全文索引,使搜索变得快速。 - **模糊查询**:支持模糊查询,如拼音、同义词等,提高了搜索的准确性。 - **多字段搜索**:可以在多个字段上同时...
1. **实体索引**: Hibernate Search允许你为实体类定义索引,通过@Field和@Analyzer等注解,可以指定字段的索引方式和分析器。 2. **全文检索**: 使用`FullTextSession`进行全文搜索,例如: ```java ...
Hibernate Search基于Apache Lucene,允许开发者在持久化的实体上实现全文索引和搜索。通过使用注解和API,开发者可以定义哪些字段应该被索引,并能够进行高级查询,如模糊匹配、短语搜索和排序等。这个特性使得应用...
Hibernate Search 3.2.1.Final支持多节点的分布式搜索,通过Lucene的Directory实现索引的分布式存储和读取,适用于大型、高并发的应用场景。 9. **热备份和恢复** 索引的备份和恢复是保证服务连续性的关键。...
1. **对象索引**:Hibernate Search可以自动或者手动创建对象的索引,索引信息存储在Lucene中,支持实时更新。 2. **全文搜索**:用户可以通过关键词进行全文搜索,返回相关度高的结果。 3. **分词与分析**:内置了...
分析器是 Lucene 和 Hibernate Search 中非常重要的组件,用于对文本进行预处理(如分词、去除停用词等)以提高搜索效率和准确性。Hibernate Search 支持自定义分析器。 #### 三、架构设计 ##### 3.1 概览 ...
1. **全文索引**:Hibernate Search能够自动或手动创建对持久化对象的全文索引,支持多种字段类型,包括文本、数字、日期等。 2. **实时搜索**:索引更新与数据保存同步,确保搜索结果的实时性。 3. **模糊搜索**...
无论是自动索引还是手动索引,Hibernate Search都能提供良好的支持。此外,通过使用不同的分析器和自定义桥接,开发者可以根据具体需求定制最适合的查询方案。总的来说,Hibernate 3.4.X版本为实现实体类的快速检索...
3. **多语言支持**:Hibernate Search支持多种语言的分词和分析,如中文、英文等,通过配置不同的Analyzer,可以实现跨语言的搜索功能。 4. **查询表达式**:使用Lucene的QueryParser或者更高级的QueryBuilder,...
《Hibernate几本书补充1》包含了两本关于Hibernate的重要著作——《Hibernate Quickly》和《Hibernate Search in Action》。Hibernate是Java领域广泛使用的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得...
- 启用自动索引:通过配置`org.hibernate.search.default.directory_provider`等属性来实现。 以上是对给定文件中提到的主要知识点的详细解释,希望可以帮助读者更好地理解和掌握Hibernate的相关知识。
ES2SH框架融合了Elasticsearch、Spring Boot、Spring MVC和Hibernate等技术,旨在提升Web应用程序的性能和易用性。以下是这些关键组件的详细解释和它们如何协同工作的概述: 1. **Elasticsearch**:这是一个分布式...
这里可以考虑使用Elasticsearch等搜索引擎来建立索引。 3. **搜索功能增强**:修改原有的搜索功能,使其能够从索引库中检索信息,而不仅仅是数据库。这将极大地扩展搜索功能的范围和能力。 #### 更新持久层至...
面试题中涉及到MyBatis的优点,如简化SQL操作、良好的性能等,同时也指出其可能的局限性,比如相比全自动化ORM框架(如Hibernate)可能需要更多的手动操作。此外,还讨论了#{}和${}的区别,实体类属性与数据库字段...