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

Hibernate Search 之 精确与 All Fields 搜索

阅读更多

在使用 Hibernate Search时,为了降低复杂性,通常都把所有的 @Field 加上

name = "ALL",然后在搜索的时候,只支持对 "ALL" 这个 Field 的搜索。这样的

好处当然是简单,不需要在搜索的时候去解析用户的输入,高亮的时候也不需要

去逐个解析搜索条件。

 

当然,有利必有弊,坏处就是不能精确的检索。例如,我只想找标题里面含有某个特殊

字符的,那么我的这种做法就没戏了。

 

解决方案是什么呢,其实也简单,还是 FieldBridge。我在 @Field 里面,不定义name,

也就是说,原来是title的field,现在还是title。只不过,我在Class上面增加了一个自己的

ClassBridge,在这个bridge里面,把所有标注为@Field的fields全部找出来,放在一个大

的字符串里面,把它命名为 "ALL"。然后在QueryParser里面,定义缺省的Field为 "ALL"。

 

当用户的搜索条件里面不包含field信息时,就直接在 "ALL"里面进行检索,当包含的时候呢,

又可以精确的定位。例如: title:abc def 就可以找到包含 def,并且 title 里面有 abc的内容。

 

接下来,上代码,在POJO里面这样写:

@Entity
@Indexed
@ClassBridge( impl = AllFieldSearchableClassBridge.class)
public class Person implements Serializable, Searchable {
...

 这个Bridge是这样实现的:

public class AllFieldSearchableClassBridge implements FieldBridge {

    @Override
    public void set(String name, Object value, Document doc, LuceneOptions luceneOptions) {
        try {
            Class<? extends Object> clz = value.getClass();
            Field[] fields = clz.getDeclaredFields();
            StringBuilder allStr = new StringBuilder();
            for ( Field field : fields) {
                org.hibernate.search.annotations.Field anno = field.getAnnotation( org.hibernate.search.annotations.Field.class);
                if ( anno == null) continue;
                Object fieldValue = ReflectUtils.getFieldValue( field, value);
                if ( fieldValue != null)
                    allStr.append( fieldValue).append( " ");
            }
            
            org.apache.lucene.document.Field field = new org.apache.lucene.document.Field("ALL", allStr.toString(), Store.YES, Index.ANALYZED);
            doc.add( field);
        } catch ( Exception e) {
            e.printStackTrace();
        }
    }
}



 

 

 

0
0
分享到:
评论

相关推荐

    Hibernate Search In Action

    Hibernate Search库将全文搜索与Hibernate持久化框架紧密结合,为Java开发者提供了方便的方式来集成全文搜索功能,而无需深入学习底层搜索引擎的复杂性。 Hibernate Search的一个显著优势是它能够自动化管理索引与...

    hibernate Search in action

    《Hibernate Search in Action》这本书深入探讨了Hibernate Search这一强大的全文搜索引擎集成框架,它将全文搜索功能无缝地融入到Java持久层框架Hibernate之中。通过利用Lucene库的强大功能,Hibernate Search为...

    Hibernate搜索框架HibernateSearch.zip

    作用在于对数据表中某些内容庞大的字段(如声明为text的字段)建立全文索引,这样通过hibernate search就可以对这些字段进行全文检索后获得相应的POJO,从而加快了对内容庞大字段进行模糊搜索的速度(sql语句中like...

    hibernateSearch+demo

    Hibernate Search 是一个基于 Hibernate ORM 的全文搜索引擎集成,它允许你在 Java 应用程序中轻松地实现复杂的全文检索功能。这个“hibernateSearch+demo”项目提供了一个实战示例,帮助开发者理解并应用 Hibernate...

    Hibernate Search配置及简单应用

    Hibernate Search是Hibernate框架的一个扩展,它允许我们在应用程序中实现全文检索功能,使得数据库中的数据可以被快速、高效地搜索。这个功能尤其在处理大量文本数据时非常有用,比如在电商网站的商品搜索或者新闻...

    hibernate search全文索引的创建及查询

    Hibernate Search是Hibernate ORM框架的一个扩展,它允许开发者在Java应用中实现全文搜索功能。这个工具结合了ORM的强大和Lucene搜索引擎的高效,使得数据库中的数据可以被快速、精准地检索。本文将深入探讨如何创建...

    hibernate-search, Hibernate Search.zip

    hibernate-search, Hibernate Search Hibernate 搜索版本:5.8.0. Final - 13-09-2017描述针对Java对象的全文搜索这个项目提供 Hibernate ORM和全文索引服务( 如 Apache Lucene和 Elasticsearch

    Hibernate Search in Action

    Hibernate Search是一个在Hibernate ORM之上构建的搜索引擎,它允许开发者在Java应用中实现强大的、数据库集成的全文搜索功能。以下是对该主题的详细阐述: 1. Hibernate Search概述:Hibernate Search是一个开源...

    hibernate-search-5.5.4 api docset for Dash

    10. **Integration with Hibernate Criteria and HQL**:Hibernate Search可以与Hibernate的Criteria API和HQL集成,允许在查询中混合使用全文搜索和传统的关系型查询。 在使用"hibernate-search-5.5.4.docset"时,...

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

    3. **Hibernate Search**:作为Hibernate的一个扩展,Hibernate Search提供了基于Lucene的全文检索功能,使得在数据库中的数据可以被快速、精确地搜索。 **二、集成Hibernate Search** 1. **配置依赖**:首先,你...

    基于hibernate search的全文搜索引擎实现完整代码和配置文件,支持中英文

    本资源提供了基于Hibernate Search实现的全文搜索引擎的完整代码和配置文件,适用于处理中英文数据,具备拼音搜索、错误纠正和搜索建议等高级功能。 Hibernate Search是Hibernate ORM的一个扩展,它允许开发者在...

    hibernate_search.pdf

    - **启用Hibernate Search与自动索引**:确保搜索功能的可用性和实体变更时的自动索引更新。 - **调整Lucene索引性能**:优化索引构建和查询性能的方法。 #### 4. 映射实体到索引结构(Mapping entities to the ...

    Hibernate Search in action (pdf && code)

    本书首先会介绍Hibernate Search的基本概念,包括什么是全文搜索引擎、如何与Hibernate ORM集成以及其工作原理。接着,会详细讲解如何配置和初始化Hibernate Search,包括设置索引存储、分析器选择和分词策略等关键...

    hibernate search-3.4.0.Final-dist

    通过集成Lucene,Hibernate Search使得开发者能够在数据库中的对象模型上执行复杂的全文搜索,而无需直接与Lucene交互。这意味着开发者可以利用熟悉的Hibernate API来处理搜索操作,大大降低了学习成本。 在3.4.0....

    hibernate search4.2

    Hibernate Search 4.2 是一个基于 Hibernate ORM 的全文搜索引擎组件,它允许开发者在 Java 应用程序中实现高效、复杂的全文检索功能。该版本发布于几年前,但仍然是许多项目依赖的重要工具,尤其对于那些需要在大量...

    hibernate-search-5.6.0.Alpha3-dist.zip

    7. **JPA集成**:作为Hibernate ORM的一部分,Hibernate Search与Java Persistence API(JPA)无缝集成,开发者可以直接在实体类上定义搜索注解,简化了代码编写和维护。 8. **性能优化**:此版本针对索引构建和...

    hibernate-search-4.3.0.zip

    Hibernate Search是Java领域中一个强大的全文搜索引擎,它将Apache Lucene的功能与Hibernate ORM框架相结合,为Java应用程序提供了便捷的、高性能的全文检索功能。在本文中,我们将深入探讨Hibernate Search 4.3.0...

Global site tag (gtag.js) - Google Analytics