hibernate search初探1

[Hibernate Search] (6) 高级查询 - 过滤,投影和分面 高级查询 在介绍了更多的高级映射功能之后,是时候回顾一下之前介绍过的查询功能了,看看如何借助这些高级的映射功能来使用一些高级的查询功能。本文会通过以下几个方面进行介绍: 如何在不和数据库进行任何交互的前提下,借助Lucene的力量来动态的筛选结果如何通过使用基于投影(Projection)的查询来获取需要的属性,从而避免与数据库的交互如何使用分面搜索(Faceted Search)对搜 阅读详情

hibernate提供了全文索引功能,非常棒,这里简要介绍下它的用法,
1. 在pom.xml引入包依赖

<dependency>
           <groupId>org.hibernate</groupId>
           <artifactId>hibernate-search-orm</artifactId>
           <version>${hibernate-search.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-smartcn</artifactId>
            <version>${lucene.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-queryparser</artifactId>
            <version>${lucene.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-phonetic</artifactId>
            <version>${lucene.version}</version>
        </dependency>
  1. hibernate配置 search index保存路径
 <bean id="sessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
        destroy-method="destroy">
        <property name="dataSource" ref="poolingDataSource" />
        <property name="configLocation">
            <value> classpath:hibernate.cfg.xml </value>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                <!-- Booleans can be easily used in expressions by 
                     declaring HQL query substitutions in Hibernate configuration -->
                <prop key="hibernate.query.substitutions">true 'Y', false 'N'</prop>
                <!-- http://ehcache.org/documentation/integrations/hibernate -->
                <!-- http://www.tutorialspoint.com/hibernate/hibernate_caching.htm -->
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <!-- org.hibernate.cache.ehcache.EhCacheRegionFactory -->
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
                <!-- hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、 list()、Iterator()、createCriteria()、createQuery()
                                等方法获得的数据结果集的话,就需要设置hibernate.cache.use_query_cache true  -->
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="net.sf.ehcache.configurationResourceName">ehcache-hibernate.xml</prop>
                <!-- Hibernate Search index directory -->
                ***<prop key="hibernate.search.default.indexBase">indexes/</prop>*** 
            </props>
        </property>
    </bean> 
  1. 对需要搜索的类加上Indexed Annotation,然后对类中可以被搜索的字段加上@Field Annotation,通常Enum字段不需要Analyzer进行词法分析,其他字段则需要,对于不需要Projection(返回部分字段)的情况下,不需要在index中存储实际数据。可以通过AnalyzerDef来定义不同的词法分析器以及对于的特殊词过滤器
@Indexed
@AnalyzerDef(
        name="enTopicAnalyzer",
        charFilters={
            @CharFilterDef(factory=HTMLStripCharFilterFactory.class)
        },
        tokenizer=@TokenizerDef(factory=StandardTokenizerFactory.class),
        filters={
            @TokenFilterDef(factory=StandardFilterFactory.class),
            @TokenFilterDef(factory=StopFilterFactory.class),
            @TokenFilterDef(factory=PhoneticFilterFactory.class,
                params = {
                    @Parameter(name="encoder", value="DoubleMetaphone")
                }),
            @TokenFilterDef(factory=SnowballPorterFilterFactory.class,
                params = {
                    @Parameter(name="language", value="English")
                })
            }
    )
public class Topic {

    ......
    @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
    @Analyzer(definition = "enTopicAnalyzer")
    private String title;
    ......
    @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
    @Analyzer(definition = "enTopicAnalyzer")
    private String content;
    ......    
    @Enumerated(EnumType.STRING)
    @Field(index=Index.YES, analyze=Analyze.NO, store=Store.NO, bridge=@FieldBridge(impl=EnumBridge.class))
    private TopicStatus status;
    ...
    }
  1. 通过代码对已有数据创建index
ApplicationContext context = new ClassPathXmlApplicationContext("spring-resources.xml");

        SessionFactory sessionFactory = (SessionFactory) context.getBean("sessionFactory");

        Session sess = sessionFactory.openSession();
        FullTextSession fullTextSession = Search.getFullTextSession(sess);
        try {
            fullTextSession.createIndexer().startAndWait();
        } catch (InterruptedException e) {
             LOG.error(e.getMessage(), e);
        } finally {
            fullTextSession.close();
        }
        ((AbstractApplicationContext)context).close();
  1. 创建查询fulltextsession,按照query条件获取结果
 FullTextSession fullTextSession = Search
                .getFullTextSession(getSession());

        QueryBuilder queryBuilder = fullTextSession.getSearchFactory()
                .buildQueryBuilder().forEntity(Show.class).get();
        org.apache.lucene.search.Query luceneQuery = null;

            luceneQuery = queryBuilder.keyword()// .wildcard()
                    .onFields("title", "content").matching(query.getKeyword())
                    // .matching("*" + query.getKeyword() + "*")
                    .createQuery();

        FullTextQuery hibernateQuery = fullTextSession.createFullTextQuery(
                luceneQuery, Show.class);
        return hibernateQuery.list();

note:
1. 在一次测试过程中,修改了value object,添加了新的index,忘记了rebuildIndex,结果unit test没问题,生成环境就出错了。
2. 搜索还不是很强大,比如搜索测,含有测试的结果可能就搜索不出来

Java全文搜索:集成Hibernate Search与Elasticsearch Hibernate Search与Elasticsearch的集成为Java应用提供了强大的全文搜索能力。通过合理配置实体映射和索引策略,开发者可以快速构建高性能的搜索功能,同时保持数据库与搜索索引的自动同步。这种架构设计不仅简化了开发复杂度,还提供了丰富的查询接口和聚合分析功能。成功实施全文搜索解决方案需要综合考虑索引设计、查询优化、性能监控和运维管理等多个方面。通过建立完善的索引生命周期管理机制和性能监控体系,可以确保搜索系统在生产环境中的稳定运行。 阅读详情

相关推荐

hibernate-search-orm-5.0.0.Alpha1.zip

weby.zip,一个简单的spring mvc+hibernate项目原型框架,用于您的maven+springmvc+hibernate web项目。

Hibernate Search 教程

Hibernate Search 教程 本文我们讨论Hibernate Search 基础知识、配置及查询搜索功能。 如果我们已经在ORM中使用Hibernate和JPA,那么离Hibernate Search只有一步之遥。Hibernate Search集成了Apache Lucene,一个高性能、可扩展的全文检索引擎。其结合了Lucene的强大功能和Hibernate和JPA的简单性,因此仅需...

neweastsun的专栏 3874

hibernate-search-orm-4.4.2.Final.zip

AtomicMapOperations.zip,在并发映射上提供基本的非阻塞原子操作的库。在并发映射上提供原子非阻塞操作。

Springboot使用Hibernate-search插件实现搜索

原理是运用hibernate结合lucene来实现局部索引。

青春不散场的专栏 711

中文分词检索IKAnalyzer3.2.3Stable+hibernate-search3.4.0.Final

中文分词检索IKAnalyzer3.2.3Stable+spring3.0.5+hibernate3.6.7+hibernate-search3.4.0.Final+maven hibernate-search3.4.0用的是lucene3.1

深入解析SDC时钟约束:从create_clock到set_clock_groups的实战指南

本文深入解析SDC时钟约束,从create_clock到set_clock_groups的实战应用,帮助数字芯片设计工程师掌握时序约束的核心技巧。通过详细讲解时钟三要素(波形定义、不确定性和时钟关系)及实战案例,提升时钟约束的精准性和效率,避免常见设计陷阱。

weixin_29274337的博客 1078

**Hibernate Search**:是一个将Hibernate ORM与Apache Lucene或Elasticsearch集成的库

- **6.0.0.Alpha2**:表示Hibernate Search的6.0版本系列中的第二个Alpha版本。Alpha版本通常是软件早期开发阶段的版本,主要以实现软件功能为主,通常只在软件开发者内部交流,一般Bug较多,需要继续修改。

[Blog][Domain] programb.blog.youkuaiyun.com 548

Nvidia Tesla A100 驱动安装方法

Nvidia Tesla A100 驱动安装方法 遇到的问题:以前安装tesla系列、geforce系列等gpu 驱动的时候,只需执行nvidiaxxxx.run驱动包或者安装nvidiaxxxx.rpm包即可,但遇到新的GPU Nvidia Tesla A100的时候,安装完驱动似乎不起作用,找了半天资料,原来需要以下步骤才可以使用;

qq_24343177的博客 2万+

HibernateSearch

创建实体类 既然目的是为了展示软件应用,那么首当其冲的实体类就是App类了,现在我们将它定义成下面这样,拥有4个字段: id:主键信息name:App的名字description:App的介绍image:App图片的链接 @Entity public class App {     @Id     @GeneratedValue     private Long

wenyilu的博客 4958

stm32 Can通讯过滤器寄存器设置(实验验证)

起因:在使用stm32单片机can通讯时,参考手册的介绍与寄存器封装有差别,不好理解怎么去设置寄存器。在参考一些代码时,对怎么去设置过滤器还是难以理解。 解决: 在寄存器封装库中,我们发现CAN过滤器设置寄存器封装有CAN1->sFilterRegister[ x ].FR1 和 CAN1->sFilterRegister[ x ].FR2 两个寄存器,其封装如下:type

u013984214的专栏 3288

闲人闲谈PS之十二——WBS-BOM在装备制造项目中的实战解析

本文深入解析了WBS-BOM在装备制造项目中的核心应用。针对按订单设计/生产的行业痛点,WBS-BOM作为项目专属物料清单,完美连接SAP PS与PP模块,确保MRP能基于项目进行精准物料需求计算,实现从设计到生产的全链路项目化跟踪与管理。

weixin_29284885的博客 399

hibernate -search

Hibernate-search的步骤 1,先用hibernate生成了相应的pojo类,和dao层中的对应的类 (在生成的时候最好用hibernate的映射方式生成,不用copy方式,因为反正在后面要删除,便于删除) 2,至关重要的一步:偷梁换柱--> 先是工程的右键--》build Path --->configure build path --> libraries --> 删掉刚才

hwt_211博客 1047

5.4 磁悬浮轴承控制系统仿真:在MATLAB/Simulink中搭建包含功放、传感器模型的闭环系统模型,进行稳定性与动态性能仿真

磁悬浮轴承控制系统仿真方法 摘要:磁悬浮轴承控制系统仿真需建立包含转子动力学、传感器、控制器、功率放大器和电磁执行器的高保真非线性模型。通过MATLAB/Simulink搭建闭环系统,重点建模传感器带宽限制与噪声、功放饱和特性以及电磁力非线性。仿真分析包括时域阶跃响应、扰动抑制测试,频域稳定性分析(伯德图、奈奎斯特图),以及参数摄动下的鲁棒性验证。关键要验证控制算法在非线性因素影响下的稳定性和动态性能,为实际系统实现提供可靠依据。仿真中需特别注意物理量单位一致性和数字控制离散化效应。

技术工作者 1107

集成Hibernate Search做全文检索

集成Hibernate Search做全文检索

小9的专栏 1万+

立创开源:基于AD831/ADF4351的250-500MHz宽频调幅信号处理实验电路设计与实现

本文详细解析了基于AD831混频器和ADF4351本振源的250-500MHz宽频调幅信号处理实验电路的设计与实现。文章从项目需求出发,系统讲解了超外差接收架构、核心模块(包括射频前端、混频器、本振源、AGC环路及解调电路)的选型与原理,并提供了实战调试波形与性能验证,为射频电路学习者提供了从理论到实践的完整指南。

weixin_35706255的博客 227

《C语言小游戏之贪吃蛇程序代码》

//为广大编程游戏爱好者提供一个参考的游戏源代码#include&lt;stdio.h&gt;#include&lt;conio.h&gt;#include&lt;windows.h&gt;#include&lt;time.h&gt;#define framex 5#define framey 5#define wide 20#define high 20int i,j,a[2];//将光标移动到...

qq_42052821的博客 2万+

hibernate search 例子

1、开发环境:spring2.5、hibernate3.3.1GA、hibernateSearch3.1.0GA; 2、开发是基于maven上开发的,首先新建一个web工程,添加maven支持,在pom.xml中添加一下几个依赖包: Java代码    &lt;dependencies&gt;         &lt;dependency&gt;         &lt;...

qiuyabing的专栏 220

自助结账商品检测(Scanned Item Detection)——基于YOLOv8的RPC数据集实战

RPC数据集是由中国科学院自动化研究所发布的零售商品结账检测公开数据集,广泛用于自助结账和零售场景下的目标检测与识别。YOLOv8是YOLO系列最新版本,由Ultralytics推出,继承了YOLO家族的高效快速和高准确性,适用于实时检测场景。本文系统介绍了基于YOLOv8的RPC数据集自助结账商品检测方案,涵盖数据准备、训练、推理及UI界面设计。未来,可结合多模态感知、RFID融合技术,打造更加智能和稳定的自助结账系统。

YOLO 249

Spring Boot + Hibernate Search示例

在这里,我们将使用Hibernate Search + Thymeleaf模板引擎创建一个Spring Boot Web应用程序示例,并将其作为WAR部署到Wildfly 10.1。 使用的技术: Spring Boot 1.5.6。发布 Java 8 Hibernate Search 5.6.1。最终版 嵌入式Tomcat,Wildfly 8.1 Final和10.1 F...

一名可爱的技术搬运工 594

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Hibernate Search 注解实例

pojo 对象 News import java.util.Date; import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persisten...

昨夜风 209

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

数据库:Oracle 9iJDBC驱动:OJDBC14开发环境:Eclipse-JEESpring版本:Spring 2.0.6Hibernate版本:Hibernate Core 3.2.5/Hibernate Annotation 3.3.0/Hibernate Validator 3.0.0/Hibernate Search 3.0.0 Beta4//jdbc.pro

走向架构师之路 1990

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Hibernate Search 6.0.0.Beta1 是 Hibernate Search 6 系列的一个重要里程碑版本

“Hibernate Search 6.0.0.Beta1 released”表示“Hibernate Search 6.0.0版本的Beta1发布了”。以下是对该发布的具体解析: - **Hibernate Search简介**:Hibernate Search是一个将Hibernate ORM与Apache Lucene或Elasticsearch集成的库,能自动为实体建立索引,提供全文搜索、地理空间搜索、聚合等高级搜索功能。

[Blog][Domain] programb.blog.youkuaiyun.com 632

Hibernate Search 文档

4.1. 映射一个实体(Mapping an entity) 在第一章中,你已经知道了建立实体索引的所有元信息是通过注解描述的,所以不需要xml的映射文件。但是你依然可以使用Hibernate的映射文件来配置基本的Hibernate映射,但Hibernate Search的配置只能通过注解来表达。 4.1.1.基本映射(Basic mapping) 我们先介绍最常使用的...

wuyichao0323的博客 246

hibernate search 组合搜索方式

使用hibernate search来搜索一个加入索引的信息时,可以组合多个搜索条件进行灵活搜索:   方式一: package org.edu.scut.lab24.uam.dao.impl; import java.util.List; import org.apache.lucene.analysis.standard.StandardAnalyzer; impo...

先相信你自己,然后别人才会相信你。 259

Hibernate search实践

也许你的项目正在使用Spring+Hibernate,而你正好需要建立全文检索。Hibernate search可以无缝得整合Hibernate和Lucene,帮助你快速实现功能强大的全文检索。 Hibernate Search通过整合Hibernate core和Lucene建立持久化对象的索引。功能强大而配置简单。下载请到[url=http://hibernate.or...

南音 161
上一篇: hibernate Criteria Query
下一篇: hibernate search -- 中文词法分析
开心的D哥
博客等级 码龄22年 63粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值