标签: hibernate-search

在Web应用程序中启动Hibernate Search时出错

有人可以提供帮助,我将hibernate搜索放入我的网络应用程序并收到以下错误:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
  "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">jdbc:postgresql://localhost/postgres</property>
        <property name="hibernate.connection.username">postgres</property>
        <property name="hibernate.connection.password">noor</property>
        <property name="hibernate.connection.pool_size">10</property>
        <property name="show_sql">true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.hbm2ddl.auto">update</property>
        <property name="current_session_context_class">thread</property> 

        <property name="hibernate.search.default.indexBase"> 
            /users/application/indexes 
        </property> 
        <property name="hibernate.search.default.indexBase"> 
            /users/application/indexes 
        </property>

        <mapping resource="com/BiddingSystem/Models/Users.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/ForumTopic.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/ForumMessage.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/Administrator.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/PersonalUser.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/BusinessUser.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/BusinessContactNumbers.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/Attribute.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/AttributeOption.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/Category.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/Item.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/Auction.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/Picture.hbm.xml"/>
        <mapping resource="com/BiddingSystem/Models/Bid.hbm.xml"/>


    </session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪:

org.hibernate.HibernateException: could not init listeners
 at org.hibernate.event.EventListeners.initializeListeners(EventListeners.java:205)
 at org.hibernate.cfg.Configuration.getInitializedEventListeners(Configuration.java:1980) …
Run Code Online (Sandbox Code Playgroud)

java lucene hibernate-search

5
推荐指数
1
解决办法
6155
查看次数

Hibernate搜索,实体和SQL VIEW

我有一个表,用于维护tbl_products使用PostgreSQL 9.1 销售的产品行.还有其他几个表维护项目,评论等的评级.我们在Seam应用程序中使用JPA/Hibernate进行ORM,并正确连接相应的实体.为了更好地列出这些项目,我创建了一个SQL VIEW(v_product_summary),它汇总了一些基本的产品数据(名称,描述,价格等)和其他表格中的数据(评论数量,平均评级)等).这提供了一个非常简洁的数据视图,我创建了一个相应的JPA实体对象,它提供对视图数据的只读访问.

关于在Productobject(tbl_products)或ProductSummary(v_product_summary)对象上运行JPQL查询,一切正常.但是,我们希望使用Hibernate Search和Lucene提供更丰富的搜索体验.但是,我们遇到的问题是如何ProductSummary使用Hibernate Search 查询对象?它们在创作时没有编入索引,因为它们从未真正"创造"过.它们是作为只读对象获得的v_product_summary VIEW.索引条目仅在Product持久保存到数据库时创建,而不是ProductSummary因为它永远不会持久化.

我们的想法是我们应该能够:

  1. 将我们的Product对象保留在数据库中
  2. ProductSummary使用产品ID 立即查询相应的对象
  3. 手动更新ProductSummary对象的Hibernate Search索引

这可能吗?这甚至是个好主意吗?我可以看到,由于我们ProductSummary每次持久保存新产品时都会对对象执行查询,因此会产生性能影响.但是,产品没有以高容量添加到数据库中,所以我认为这不是一个大问题.

我们真的希望找到一种更好,更有效的方法来实现这一目标.有人可以提供任何提示或建议吗?如果我们手动更新搜索索引的路线,那是否可行?任何人都可以提供资源来解释我们如何将单个ProductSummary添加到索引中吗?

非常感谢您提供的任何帮助.

sql lucene hibernate view hibernate-search

5
推荐指数
1
解决办法
1463
查看次数

Hibernate Search需要@DocumentId吗?

我正在使用Hibernate Search,文档和书籍说我需要在id字段上使用@DocumentId,以便Hibernate Search可以知道如何将索引映射到对象.

我的代码似乎在没有@DocumentId的情况下工作正常.Hibernate Search是否足够聪明,以确定@Id字段是一个很好的默认值?是否存在导致不明显的问题?

谢谢你的时间!

indexing hibernate hibernate-search

5
推荐指数
1
解决办法
2341
查看次数

如何在日期之间搜索(Hibernate Search)?

我想知道如何使用Range-Query在Hibernate Search中按日期搜索,或者我是否需要实现任何过滤器.以下是我在Record Entity中的字段

    /**
     * When the analysis started.
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Field(index = Index.UN_TOKENIZED)
    @DateBridge(resolution = Resolution.MILLISECOND)
    private Date startTS;
Run Code Online (Sandbox Code Playgroud)

我的要求是找到两个日期之间分析的记录,例如.11/11/2011至11/11/2012.I我很困惑如何做到这一点.

java lucene hibernate hibernate-search

5
推荐指数
1
解决办法
8850
查看次数

当通过hibernate在DB中发生任何更新时,lucene索引不会同步

我正在使用下面的env 在Lucene上进行Hibernate Search的一些POC工作:

  • 休眠的搜索引擎,4.4.2.Final.jar
  • Lucene的核心 - 3.6.2.jar
  • MySQL 5.5
  • @Indexed在域类上使用注释.
  • @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)在场上使用.
  • 使用@IndexedEmbedded不同域类的实例集合.

在应用程序启动时进行了显式索引(因为这是在Hibernate Search API中编写的,Hibernate Search将通过Hibernate Core,Hibernate Search Indexing透明地索引每个实体持久化,更新或删除),代码如下:

private static void doIndex() throws InterruptedException {
    Session session = HibernateSearchUtil.getSession();

    FullTextSession fullTextSession = Search.getFullTextSession(session);
    fullTextSession.createIndexer().startAndWait();

    fullTextSession.close();
}
Run Code Online (Sandbox Code Playgroud)

在已经播种的数据库上进行索引和搜索以及通过应用程序中的hibernate核心进行创建和删除操作时,它可以正常工作.

但不是通过Hibernate Core对现有数据进行任何更新操作,因为当通过hibernate搜索进行搜索时,我没有获得更新的数据.

不知道Hibernate Search或lucene是否有问题的原因,意味着索引没有得到更新或者由于没有通过Hibernate Search获得更新结果的其他原因.

用户类:

@Entity
@Table(name = "user")
@Indexed
public class User implements java.io.Serializable {

private static final long serialVersionUID = 5753658991436258019L;
private Integer …
Run Code Online (Sandbox Code Playgroud)

lucene hibernate hibernate-search

5
推荐指数
1
解决办法
1433
查看次数

如何删除Hibernate Search中的所有重复结果?

我正在使用带有Hibernate Search 4.4.0的Infinispan和6.0.2.

在开始之后,我执行了一个类似的查询

CacheQuery cq = SearchManager.getQuery(query,Hibernate.class).projection("id");
Run Code Online (Sandbox Code Playgroud)

我用它cq.list()来获取"id".

但是现在结果的数量达到了300.000,因为设计了DB(不能改变),重复的id几乎是29,000.

我写这个来获得"id":

for(int i=0;i<listObject.size();i++)
{
    Object[] rdf = (Object[])listObject.get(i);
    if(!result.contains((String) rdf[0])) 
       result.add((String) rdf[0]);
}
Run Code Online (Sandbox Code Playgroud)

但即使我将这一部分平行,也需要很长时间.

是否有一个函数来删除Hibernate中查询的重复ID,就像DISTINCT在SQL中那样?

hibernate hibernate-search infinispan

5
推荐指数
1
解决办法
906
查看次数

Hibernate Search中的布尔查询

我试图在Hibernate Search中理解一般的查询.我在理解forEntity(...)方法时遇到了一些麻烦.这是文档说的:

我们来看看如何使用API​​.首先需要创建附加到给定索引实体类型的查询构建器.此QueryBuilder将知道要使用的分析器和要应用的字段桥.您可以创建多个QueryBuilder(一个用于查询根目录中涉及的每个实体类型).您从SearchFactory获取QueryBuilder.

从部分:5.1.2.使用Hibernate Search查询DSL构建Lucene查询

QueryBuilder mythQB = searchFactory.buildQueryBuilder().forEntity( Myth.class ).get();
Run Code Online (Sandbox Code Playgroud)

从上面你可以看到你必须命名一个实体.当您想要创建自己的查询构建器以在"根"查询中创建布尔查询时,您应该怎么做?你应该怎么绑?

假设我想要一个应该匹配"Apples"或"Pie"的布尔查询.这是两个不同的实体,所以目前我有两个不同的查询构建器.但我需要第三个来创建一个布尔查询.这应该是Object课吗?

java lucene hibernate java-ee hibernate-search

5
推荐指数
1
解决办法
1955
查看次数

使用hibernate通过userId字段过滤全文搜索结果

假设我有2个实体注释用于全文搜索:

@Entity
public class User implements Serializable {

    @Id
    public Long id;    
    ...

}

@Entity
@Indexed
public class Post {

    @Id
    public Long id;

    @Field(name = "content")
    public String content;

    @ManyToOne
    public User user;

    ...

}
Run Code Online (Sandbox Code Playgroud)

在内容字段上编写全文搜索非常简单.但是如何通过text关键字和用户ID过滤结果?例如,在内容字段上搜索"hello"而在user.id上搜索等于10的查询?

java full-text-search hibernate hibernate-search jpa-2.1

5
推荐指数
1
解决办法
592
查看次数

HibernateSearch ClassBridge - 排序和分面不适用于HS 5.5.1

我刚刚在hibernate搜索论坛上发布了这个并没有得到任何响应,所以再次尝试在stackoverflow ...

由于从HS 4.5.1迁移到HS 5.5.1,我们在排序和分面方面存在问题.

我们所有的索引都使用类桥来完成,该类调用CDI-Bean来进行实际的索引.在我们的系统中,索引哪些字段的配置是动态的,并且可以在运行时更改,因此我们不能使用HS注释.

排序:我们希望利用docureues利用lucene的新排序功能.我们尝试向MetadataProvidingFieldBridge类桥添加接口以提供哪些字段是排序字段的信息,但是当类桥被初始化时(当jboss启动时)CDI-bean尚不可用.

问题1:SearchIntegrator当CDI-bean可用或我们的索引配置发生变化时,有没有办法在以后重新初始化HS- ?目前HS回归到使用UninvertingReaderfor来处理没有docvalues的排序字段.

问题2:将来会支持这个吗?使用性能有多"糟糕" UninvertingReader

使用faceting我们面临类似的问题,我们不能使用@Facet-annotation,因为配置是动态的.目前我们直接使用lucene的faceting API.

问题3:HS是否有计划在不久的将来通过类桥添加分面信息,类似于MetadataProvidingFieldBridge?将来Hibernate Search会支持类桥吗?

ClassBridge代码:

public class FtiClassBridgeCE implements FieldBridge, MetadataProvidingFieldBridge
{
@Override
public void set(String fieldName, Object value, Document document, LuceneOptions options)
{
    if( !(value instanceof ComplexEntity))
        return; // ignore

    ComplexEntity object = (ComplexEntity)value;
    // FtiService does the actual indexing by adding fields to given document
    Configuration.service( FtiService.class).setIndexData( object, new FtiDocumentHS( document, options));
}

/* …
Run Code Online (Sandbox Code Playgroud)

java sorting lucene hibernate hibernate-search

5
推荐指数
0
解决办法
207
查看次数

如何使用Elasticsearch集成按类型查询配置类型名称或过滤器?

我正在使用Hibernate Search与Elasticsearch集成版本5.8.2和5.6.

假设我有两个使用相同数据库的应用程序,我想搜索Person实体.两个应用程序都将更新索引,但只会读取其中一个.

因为默认情况下Hibernate Search对types 使用完全限定的类名,所以我最终为同一个实体提供了2种不同的类型:

Person - > com.example.x.Person

Person - > com.example.y.Person

在我正在执行搜索的应用程序中,在构建搜索查询时,Hibernate Search会自动添加filter查询type:

"filter": {
    "type": {"value": "com.example.x.Person"}
}
Run Code Online (Sandbox Code Playgroud)

因此搜索结果不包含com.example.y.Person类型的记录.

有什么办法可以自定义类型名称吗?

或者,有没有办法禁用/自定义添加的filter查询?

hibernate-search

5
推荐指数
1
解决办法
78
查看次数