`
SimonLei
  • 浏览: 176170 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate Search 之 结果集高亮

阅读更多

使用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才行。

2
0
分享到:
评论

相关推荐

    hibernateSearch+demo

    这个“hibernateSearch+demo”项目提供了一个实战示例,帮助开发者理解并应用 Hibernate Search 的核心概念和功能。 在 Hibernate Search 中,主要涉及以下关键知识点: 1. **全文索引**:Hibernate Search 使用 ...

    hibernate search-3.4.0.Final-dist

    2. **实时索引**:当数据库中的数据发生变化时,Hibernate Search能够实时更新对应的索引,确保搜索结果始终与数据库状态同步。 3. **多字段搜索**:支持对多个字段进行复合条件的搜索,可以通过布尔逻辑(AND、OR...

    hibernate-search-4.3.0.zip

    4. **高亮显示**:使用Highlighter接口可以实现搜索结果中的关键词高亮。 五、实战示例 以下是一个简单的使用Hibernate Search 4.3.0进行全文搜索的示例: ```java @Entity @Indexed public class Product { @Id...

    hibernate search源码

    `SearchFactory`负责初始化和配置搜索引擎实例,而`QueryExecutor`执行查询并返回结果集。源码中可以看到如何根据配置选择最佳的查询执行策略,如使用缓存、并行执行等。 **8. 整合与部署** 在实际应用中,`...

    HibernateSearch--maven集成了SSH

    压缩包包括项目完整代码,详细说明和项目结构图,效果图 项目实现了分页和高亮显示 MAVEN项目:HibernateSearchDemo IDE :MyEclipse jdk :1.6 数据库 :MySql ...hibernate search 版本 4.4.1.Final

    \hibernate search in action.rar

    《Hibernate Search In Action》这本书是关于Java开发中Hibernate Search框架的深入指南,它涵盖了这个强大的全文搜索引擎集成工具的各个方面。Hibernate Search允许开发者在Java应用程序中实现高效、灵活的全文搜索...

    hibernateSearch 搜索 索引列子源代码

    **hibernateSearch 搜索 索引列子源代码** Hibernate Search 是 Hibernate 的一个扩展模块,它将全文搜索引擎的功能集成到了 Java 应用中,允许开发者在数据库中进行复杂的文本搜索。本教程将深入探讨 Hibernate ...

    hibernate-search

    **Apache Lucene** 是一个开源的全文搜索引擎库,它提供了索引、搜索、高亮显示搜索结果等功能。Lucene是用Java编写的,设计为可嵌入到其他应用中,允许开发者创建自己的搜索引擎。通过 **hibernate-search**,...

    Hibernate_Search_Reference_Guide

    - **分页查询**: 支持按需返回结果集的一部分。 - **高亮显示**: 能够高亮显示搜索结果中的匹配部分。 ##### 2.6 分析器 - **标准分析器**: 默认使用的标准分析器,可以对文本进行基本的清洗和标准化处理。 - **...

    Shiro+SpringMVC+Hibernate Search+Hibernate+Bootstrap企业信息管理系统基础框架搭建整合实例代码教程

    在企业信息管理系统中,Hibernate Search可以用来实现复杂的查询需求,比如模糊搜索、关键词高亮等,提高用户体验。 4. Hibernate:Hibernate是一个对象关系映射(ORM)框架,它将Java对象与数据库表对应起来,使得...

    基于Spring的Hibernate Search全文检索功能示例

    在IT行业中,全文检索是一种非常重要的技术,尤其是在大数据量的Web应用或数据库中,它...这只是一个基础示例,实际应用中可能需要根据具体需求进行优化和扩展,例如增加多语言支持、分词器选择、高亮显示搜索结果等。

    hibernate5.5.4

    3. **近实时搜索**: 搜索结果几乎是实时的,因为Hibernate Search会监听Hibernate的事件,当对象被持久化、更新或删除时,相应地更新索引。 4. **多字段和多类型搜索**: 支持对多个字段进行搜索,并且可以混合使用...

    hibernate-search-4.5.2.Final-dist.zip

    Hibernate Search的核心功能在于它能够实现在数据库中进行全文检索,这包括对文本的模糊匹配、关键词高亮、多语言支持等。它将数据库的数据与Lucene索引紧密结合,使得开发者可以方便地在Java对象和搜索查询之间进行...

    hibernate tools

    1. **Hibernate ORM**:首先,我们需要了解 Hibernate ORM,它是Java领域中最流行的持久化框架之一。它允许开发者通过面向对象的方式来操作数据库,而无需编写大量的SQL语句。Hibernate ORM 提供了对象关系映射(ORM...

    hibernate-search-4.4.6.Final.zip

    《深入理解Hibernate Search 4.4.6.Final与Java客户端实现Spotify Web API》 在当今的软件开发中,高效、精准的数据检索是至关重要的。Hibernate Search是Hibernate ORM框架的一个强大扩展,它允许开发者在Java应用...

    hibernate 4.0

    - 文件名`hibernate-search-4.4.0.Final`表明包含的是Hibernate Search模块,这是一个集成全文搜索引擎(如Lucene)的插件,允许开发者实现复杂的全文搜索功能,例如模糊匹配、关键词高亮等。 6. **兼容性与互操作...

    HiSInAction代码

    《HiSInAction代码》是基于Hibernate Search的一个项目实例,主要展示了如何在Java应用程序中集成并有效利用Hibernate Search的功能。Hibernate Search是Hibernate框架的一个扩展,它提供了在持久化对象上进行全文...

    struts2+spring3+hibernate3实现商城系统

    Solr允许对大量数据进行快速高效的全文检索、命中高亮、 faceted search(分面搜索)等。在本商城系统中,Solr可能被用于商品的搜索功能,使用户能够快速找到所需的商品,提升用户体验。 **jQuery** 是一个轻量级的...

    search.rar

    Lucene的核心功能包括文档索引、搜索和高亮显示搜索结果。其主要工作流程包括创建索引、查询索引和返回结果。通过将非结构化的文本数据转化为结构化的索引,Lucene可以快速地对大量文本进行搜索,从而实现高效的信息...

    lucene笔记共38页.pdf.zip

    开发者可以结合Spring Data、Hibernate Search等框架轻松集成Lucene到Java应用中。 总的来说,《Lucene笔记共38页.pdf》是一份全面且深入的教程,适合希望掌握全文检索技术的开发者学习。通过这份笔记,读者不仅能...

Global site tag (gtag.js) - Google Analytics