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

hibernate search手动建索引和组合条件搜索(转)

阅读更多

近日需要做一下搜索的功能,之前就听说过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.pdf 描述与标签:此文档详细介绍了...通过上述知识点,读者可以全面了解Hibernate Search的功能、架构、配置和使用技巧,从而在实际项目中有效应用全文搜索技术,提升数据检索的准确性和效率。

    hibernate search4.2

    Hibernate Search 是 Hibernate 的一个扩展,它将 Apache Lucene 集成到 Hibernate ORM 中,使得数据库中的对象可以直接被索引和搜索。通过使用 Hibernate Search,开发者可以利用 Lucene 的强大搜索功能,而无需...

    使用hibernate search实现全文检索和文档管理的例子

    使用hibernate search实现全文检索和文档管理功能: 1 全文检索 2 手动生成索引 3 文档上传(自动建立索引) 4 文档更新(自动建立索引) 5 文档删除 使用说明: 1 需要先恢复数据库 searchDB_2008sqlserver.bak 2 ...

    使用 hibernate-search 实现全文检索及文档管理的例子

    **使用Hibernate Search实现全文...结合Apache Lucene的强大搜索功能,Hibernate Search使得在数据库中进行复杂的文本搜索变得简单易行。在实际项目中,根据业务需求调整索引策略,可以进一步优化搜索性能和用户体验。

    Getting Started with Hibernate Search

    实体映射是Hibernate Search的核心功能之一,它将数据库表结构与搜索索引关联起来,使开发者能够在不修改数据库架构的情况下,实现对数据的高效搜索。在映射过程中,你需要定义哪些字段应被索引,以及如何处理这些...

    hibernate-search-4.5.0.Final-dist.zip

    Hibernate Search则是在这个基础上,结合了Lucene搜索引擎,提供了对数据库内数据的全文索引和检索能力,使得搜索功能更加高效和灵活。 在4.5.0.Final版本中,Hibernate Search提供了一系列关键特性: 1. **全文...

    hibernate-search-3.4.0.Final--1.rar

    - **全文索引**:Hibernate Search能够自动或手动创建和更新对象的全文索引,使搜索变得快速。 - **模糊查询**:支持模糊查询,如拼音、同义词等,提高了搜索的准确性。 - **多字段搜索**:可以在多个字段上同时...

    hibernate-search-4.1.1.Final-dist.zip

    1. **实体索引**: Hibernate Search允许你为实体类定义索引,通过@Field和@Analyzer等注解,可以指定字段的索引方式和分析器。 2. **全文检索**: 使用`FullTextSession`进行全文搜索,例如: ```java ...

    hibernate-search-4.3.0.Final

    Hibernate Search基于Apache Lucene,允许开发者在持久化的实体上实现全文索引和搜索。通过使用注解和API,开发者可以定义哪些字段应该被索引,并能够进行高级查询,如模糊匹配、短语搜索和排序等。这个特性使得应用...

    hibernate-search-3.2.1.Final-dist.zip

    Hibernate Search 3.2.1.Final支持多节点的分布式搜索,通过Lucene的Directory实现索引的分布式存储和读取,适用于大型、高并发的应用场景。 9. **热备份和恢复** 索引的备份和恢复是保证服务连续性的关键。...

    hibernate-search-4.3.0.Alpha1-dist.zip

    1. **对象索引**:Hibernate Search可以自动或者手动创建对象的索引,索引信息存储在Lucene中,支持实时更新。 2. **全文搜索**:用户可以通过关键词进行全文搜索,返回相关度高的结果。 3. **分词与分析**:内置了...

    hibernate_search

    分析器是 Lucene 和 Hibernate Search 中非常重要的组件,用于对文本进行预处理(如分词、去除停用词等)以提高搜索效率和准确性。Hibernate Search 支持自定义分析器。 #### 三、架构设计 ##### 3.1 概览 ...

    hibernate-search-4.2.0.CR1-dist.zip

    1. **全文索引**:Hibernate Search能够自动或手动创建对持久化对象的全文索引,支持多种字段类型,包括文本、数字、日期等。 2. **实时搜索**:索引更新与数据保存同步,确保搜索结果的实时性。 3. **模糊搜索**...

    Hibernate3.4.X 代码快速查询 实体更快 更方便

    无论是自动索引还是手动索引,Hibernate Search都能提供良好的支持。此外,通过使用不同的分析器和自定义桥接,开发者可以根据具体需求定制最适合的查询方案。总的来说,Hibernate 3.4.X版本为实现实体类的快速检索...

    hibernate-search-4.4.6.Final.zip

    3. **多语言支持**:Hibernate Search支持多种语言的分词和分析,如中文、英文等,通过配置不同的Analyzer,可以实现跨语言的搜索功能。 4. **查询表达式**:使用Lucene的QueryParser或者更高级的QueryBuilder,...

    Hibernate几本书补充1

    《Hibernate几本书补充1》包含了两本关于Hibernate的重要著作——《Hibernate Quickly》和《Hibernate Search in Action》。Hibernate是Java领域广泛使用的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得...

    hibernate教程

    - 启用自动索引:通过配置`org.hibernate.search.default.directory_provider`等属性来实现。 以上是对给定文件中提到的主要知识点的详细解释,希望可以帮助读者更好地理解和掌握Hibernate的相关知识。

    一种基于ES2SH框架的Java EE应用架构.pdf

    ES2SH框架融合了Elasticsearch、Spring Boot、Spring MVC和Hibernate等技术,旨在提升Web应用程序的性能和易用性。以下是这些关键组件的详细解释和它们如何协同工作的概述: 1. **Elasticsearch**:这是一个分布式...

    扩展JPETSTORE

    这里可以考虑使用Elasticsearch等搜索引擎来建立索引。 3. **搜索功能增强**:修改原有的搜索功能,使其能够从索引库中检索信息,而不仅仅是数据库。这将极大地扩展搜索功能的范围和能力。 #### 更新持久层至...

    1000道 互联网Java工程师面试题 485页

    面试题中涉及到MyBatis的优点,如简化SQL操作、良好的性能等,同时也指出其可能的局限性,比如相比全自动化ORM框架(如Hibernate)可能需要更多的手动操作。此外,还讨论了#{}和${}的区别,实体类属性与数据库字段...

Global site tag (gtag.js) - Google Analytics