0

我正在尝试使用hibernate-search-4.3.0.Final.jar创建一个休眠全文搜索 此应用程序中没有错误,但我的 Lucene 查询取消查询 DSL 不返回任何结果。我的意思是它不会返回表中的任何行。谁能帮帮我吗。

这是我的功能:

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


        FullTextSession fulltextsession= Search.getFullTextSession(session);
        QueryBuilder querybuilder=fulltextsession.getSearchFactory().buildQueryBuilder().forEntity(User.class).get();
        org.apache.lucene.search.Query lucenequery=querybuilder.keyword().onField("IdU").matching("96645").createQuery();
        org.hibernate.search.FullTextQuery fulltextquery=fulltextsession.createFullTextQuery(lucenequery, User.class);
        List result=fulltextquery.list();
        System.out.println(result.toString());

这是我的 POJO 课程:

@Entity
@Table(name="Users")
@Indexed
public class User {
    @Id
    @GeneratedValue(generator="mongodb_uuidgg")
    @Field(index = Index.YES,analyze = Analyze.NO,store = Store.NO)
    private String  _id;
    @Column(name="City")
    @Field(index = Index.YES,analyze = Analyze.NO,store = Store.NO)
    private String city;
    @Column(name="UserID")
    @Field(index = Index.YES,analyze = Analyze.NO,store = Store.NO)
    private int IdU;
...
4

3 回答 3

2

我会使用 Luke 来验证您的查询是否确实从索引中返回了您想要的内容。

[编辑...] 如果 Luke 显示索引为空,您将需要查看您的索引设置。

于 2013-08-21T19:15:37.937 回答
1

很可能是 id 字段的配置不正确。它应该是:

@Id
@GeneratedValue(generator="mongodb_uuidgg")
@DocumentId
private String  _id;

(即@DocumentId代替@Field)。

于 2013-08-21T19:48:05.090 回答
0

你真的索引数据了吗?如果您从现有数据库开始,则需要创建初始索引。您可以使用程序化索引 API 和海量索引器来创建初始索引。一旦你有了初始索引并且你正在使用增量索引,索引将与数据库更改保持同步(假设更改是通过 Hibernate/JPA API 进行的)。

除此之外,请查看 lg 文件。里面有东西吗?如果您仍然有问题,请发布您用于索引数据的代码。

于 2013-08-27T15:03:02.460 回答