使用Hibernate Ogm在Mongodb中进行全文搜索

时间:2013-08-26 12:57:41

标签: mongodb lucene hibernate-search hibernate-ogm

我想使用Hibernate OGM在MongoDB中实现Fulltextsearch。我编写了代码,但代码返回一个空结果。我检查了两个由lucene和Luke生成的文件,但看起来它们都是空的。我不知道我的问题是什么原因。

我已使用此命令在我的集合中启用了全文搜索:

db.adminCommand( { setParameter : "*", textSearchEnabled : true } );

并且我已将索引放在Users集合中的 UserID 字段中。

db.Users.ensureIndex({UserID:1 })

我也有这个实体类:

@Entity
@Indexed
@Table(name="Users")
@GenericGenerator(name="mongodb_uuidgg",strategy = "uuid2")
public class User implements Serializable{
    private static final long serialVersionUID=1L;
    @DocumentId
    private String  id;

    @Column(name="City")
    @Field(index = Index.NO,analyze = Analyze.YES,store = Store.YES)
    private String city;

    @Column(name="UserID")
    @NumericField
    @Field(index = Index.YES,analyze = Analyze.NO,store = Store.YES)
    private int IdU;

在我的DAO课程中:

OgmConfiguration cfgogm=new OgmConfiguration();
cfgogm.configure("hibernate.cfg.xml");
serviceregistry=new ServiceRegistryBuilder().applySettings(cfgogm.getProperties()).buildServiceRegistry();
sessionfactory=cfgogm.buildSessionFactory(serviceregistry);  

sessionfactory.openSession();
FullTextSession fulltextsession= Search.getFullTextSession(sessionfactory.getCurrentSession());
QueryBuilder querybuilder=fulltextsession.getSearchFactory().buildQueryBuilder().forEntity(User.class).get();
org.apache.lucene.search.Query lucenequery=querybuilder.keyword().onField("IdU").matching(new Integer(87709)).createQuery();

org.hibernate.search.FullTextQuery fulltextquery=fulltextsession.createFullTextQuery( lucenequery,User.class );
fulltextquery.initializeObjectsWith(ObjectLookupMethod.SKIP, DatabaseRetrievalMethod.FIND_BY_ID);
List result=fulltextquery.list();
System.out.println(result.size());

如果我用Luke打开segment.gen,我会看到以下信息: enter image description here

你能帮我解决这个问题吗?或者如何使用Hibernate和Lucene与MongoDB实现全文搜索

非常感谢你

1 个答案:

答案 0 :(得分:1)

我不太清楚你的总体目标是什么,但你混合了两件事。有一个内置的mongodb全文搜索功能,还有Hibernate OGM可以与Hibernate Search结合使用。但是,它们是两个不同的东西。设置mongodb参数textSearchEnabled不会创建一个Lucene索引,以防万一你的期望。您需要使用Hibernate Search索引API或质量索引器来创建初始索引。