0

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

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

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

而且我已将索引放在用户集合中的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,我会看到以下信息: 在此处输入图像描述

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

太感谢了

4

1 回答 1

1

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

于 2013-09-05T06:07:03.467 回答