使用Hibernate Search方便是方便,可是找出来的结果,都是一个个的实体。而当我想要
使用高亮时,就没那么简单了。一开始走了弯路,按照以前直接用 lucene 的经验,打算自己
找到 QueryHits,然后对 QueryHits的结果进行逐个的高亮。幸好及时搜索了一下,对我帮助
最大的就是 https://forums.hibernate.org/viewtopic.php?f=9&t=982678 这篇文章。
当然,这篇文章也有点复杂了,不知道为啥要对query进行rewrite。在我看来,帮助最大的就是
提醒了我,可以用 query.setProjection(FullTextQuery.THIS,
FullTextQuery.DOCUMENT_ID,FullTextQuery.DOCUMENT,FullTextQuery.SCORE,FullTextQuery.BOOST);
来获取到 Document,以及Score。有了这个之后,事情就简单多了
public List<SearchResult> search(String value) throws Exception {
Session session = getSession();
FullTextSession fullTextSession = Search.getFullTextSession( session);
StandardAnalyzer standardAnalyzer = new StandardAnalyzer( Version.LUCENE_CURRENT);
QueryParser parser = new QueryParser( Version.LUCENE_CURRENT, "ALL", standardAnalyzer);
Query query = parser.parse( value);
FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( query);
fullTextQuery.setProjection(FullTextQuery.THIS, FullTextQuery.DOCUMENT, FullTextQuery.SCORE);
Collection<Object[]> queryResult = fullTextQuery.list();
QueryScorer qs = new QueryScorer( query);
Formatter formatter = new SimpleHTMLFormatter( "<b><font color=\"red\">", "</font></b>");
Highlighter highlighter = new Highlighter( formatter, qs);
List<SearchResult> result = new ArrayList<SearchResult>();
for ( Object[] objs: queryResult ) {
Document document = (Document) objs[1];
org.apache.lucene.document.Field field = document.getField("ALL");
String[] highlight = highlighter.getBestFragments( standardAnalyzer, "ALL", field.stringValue(), 5);
// 这儿就是处理如何返回结果了
}
return result;
}
当然,前提是你的这些内容要是Store.YES才行。
分享到:
相关推荐
这个“hibernateSearch+demo”项目提供了一个实战示例,帮助开发者理解并应用 Hibernate Search 的核心概念和功能。 在 Hibernate Search 中,主要涉及以下关键知识点: 1. **全文索引**:Hibernate Search 使用 ...
2. **实时索引**:当数据库中的数据发生变化时,Hibernate Search能够实时更新对应的索引,确保搜索结果始终与数据库状态同步。 3. **多字段搜索**:支持对多个字段进行复合条件的搜索,可以通过布尔逻辑(AND、OR...
4. **高亮显示**:使用Highlighter接口可以实现搜索结果中的关键词高亮。 五、实战示例 以下是一个简单的使用Hibernate Search 4.3.0进行全文搜索的示例: ```java @Entity @Indexed public class Product { @Id...
`SearchFactory`负责初始化和配置搜索引擎实例,而`QueryExecutor`执行查询并返回结果集。源码中可以看到如何根据配置选择最佳的查询执行策略,如使用缓存、并行执行等。 **8. 整合与部署** 在实际应用中,`...
压缩包包括项目完整代码,详细说明和项目结构图,效果图 项目实现了分页和高亮显示 MAVEN项目:HibernateSearchDemo IDE :MyEclipse jdk :1.6 数据库 :MySql ...hibernate search 版本 4.4.1.Final
《Hibernate Search In Action》这本书是关于Java开发中Hibernate Search框架的深入指南,它涵盖了这个强大的全文搜索引擎集成工具的各个方面。Hibernate Search允许开发者在Java应用程序中实现高效、灵活的全文搜索...
**hibernateSearch 搜索 索引列子源代码** Hibernate Search 是 Hibernate 的一个扩展模块,它将全文搜索引擎的功能集成到了 Java 应用中,允许开发者在数据库中进行复杂的文本搜索。本教程将深入探讨 Hibernate ...
**Apache Lucene** 是一个开源的全文搜索引擎库,它提供了索引、搜索、高亮显示搜索结果等功能。Lucene是用Java编写的,设计为可嵌入到其他应用中,允许开发者创建自己的搜索引擎。通过 **hibernate-search**,...
- **分页查询**: 支持按需返回结果集的一部分。 - **高亮显示**: 能够高亮显示搜索结果中的匹配部分。 ##### 2.6 分析器 - **标准分析器**: 默认使用的标准分析器,可以对文本进行基本的清洗和标准化处理。 - **...
在企业信息管理系统中,Hibernate Search可以用来实现复杂的查询需求,比如模糊搜索、关键词高亮等,提高用户体验。 4. Hibernate:Hibernate是一个对象关系映射(ORM)框架,它将Java对象与数据库表对应起来,使得...
在IT行业中,全文检索是一种非常重要的技术,尤其是在大数据量的Web应用或数据库中,它...这只是一个基础示例,实际应用中可能需要根据具体需求进行优化和扩展,例如增加多语言支持、分词器选择、高亮显示搜索结果等。
3. **近实时搜索**: 搜索结果几乎是实时的,因为Hibernate Search会监听Hibernate的事件,当对象被持久化、更新或删除时,相应地更新索引。 4. **多字段和多类型搜索**: 支持对多个字段进行搜索,并且可以混合使用...
Hibernate Search的核心功能在于它能够实现在数据库中进行全文检索,这包括对文本的模糊匹配、关键词高亮、多语言支持等。它将数据库的数据与Lucene索引紧密结合,使得开发者可以方便地在Java对象和搜索查询之间进行...
1. **Hibernate ORM**:首先,我们需要了解 Hibernate ORM,它是Java领域中最流行的持久化框架之一。它允许开发者通过面向对象的方式来操作数据库,而无需编写大量的SQL语句。Hibernate ORM 提供了对象关系映射(ORM...
《深入理解Hibernate Search 4.4.6.Final与Java客户端实现Spotify Web API》 在当今的软件开发中,高效、精准的数据检索是至关重要的。Hibernate Search是Hibernate ORM框架的一个强大扩展,它允许开发者在Java应用...
- 文件名`hibernate-search-4.4.0.Final`表明包含的是Hibernate Search模块,这是一个集成全文搜索引擎(如Lucene)的插件,允许开发者实现复杂的全文搜索功能,例如模糊匹配、关键词高亮等。 6. **兼容性与互操作...
《HiSInAction代码》是基于Hibernate Search的一个项目实例,主要展示了如何在Java应用程序中集成并有效利用Hibernate Search的功能。Hibernate Search是Hibernate框架的一个扩展,它提供了在持久化对象上进行全文...
Solr允许对大量数据进行快速高效的全文检索、命中高亮、 faceted search(分面搜索)等。在本商城系统中,Solr可能被用于商品的搜索功能,使用户能够快速找到所需的商品,提升用户体验。 **jQuery** 是一个轻量级的...
Lucene的核心功能包括文档索引、搜索和高亮显示搜索结果。其主要工作流程包括创建索引、查询索引和返回结果。通过将非结构化的文本数据转化为结构化的索引,Lucene可以快速地对大量文本进行搜索,从而实现高效的信息...
开发者可以结合Spring Data、Hibernate Search等框架轻松集成Lucene到Java应用中。 总的来说,《Lucene笔记共38页.pdf》是一份全面且深入的教程,适合希望掌握全文检索技术的开发者学习。通过这份笔记,读者不仅能...