有人可以提供帮助,我将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) 我有一个表,用于维护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因为它永远不会持久化.
我们的想法是我们应该能够:
Product对象保留在数据库中ProductSummary使用产品ID 立即查询相应的对象ProductSummary对象的Hibernate Search索引这可能吗?这甚至是个好主意吗?我可以看到,由于我们ProductSummary每次持久保存新产品时都会对对象执行查询,因此会产生性能影响.但是,产品没有以高容量添加到数据库中,所以我认为这不是一个大问题.
我们真的希望找到一种更好,更有效的方法来实现这一目标.有人可以提供任何提示或建议吗?如果我们手动更新搜索索引的路线,那是否可行?任何人都可以提供资源来解释我们如何将单个ProductSummary添加到索引中吗?
非常感谢您提供的任何帮助.
我正在使用Hibernate Search,文档和书籍说我需要在id字段上使用@DocumentId,以便Hibernate Search可以知道如何将索引映射到对象.
我的代码似乎在没有@DocumentId的情况下工作正常.Hibernate Search是否足够聪明,以确定@Id字段是一个很好的默认值?是否存在导致不明显的问题?
谢谢你的时间!
我想知道如何使用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我很困惑如何做到这一点.
我正在使用下面的env 在Lucene上进行Hibernate Search的一些POC工作:
@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) 我正在使用带有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 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课吗?
假设我有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的查询?
我刚刚在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) 我正在使用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查询?