2013-08-21 57 views
0

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

这是我的函数:

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; 
... 

回答

2

我会用卢克来验证你的查询实际上将返回你从索引中想要的东西。

[编辑...] 如果卢克表明,该指数是空的,你需要看看你的索引设置。

+0

谢谢。可以zou请解释我,我怎么可以用卢克来验证我的查询返回索引我想要的 – TangoStar

+0

我试过使用卢克,但是当我导航到索引文件夹时,我得不到任何结果,它说(字段数:0,文件数量:0,条款数量:0) – TangoStar

1

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

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

(即@DocumentId代替@Field)。

+0

谢谢你的回答,我已经改变了我的代码,但问题仍然存在 – TangoStar

0

您是否实际编制了索引数据?如果您从现有数据库开始,则需要创建初始索引。您可以使用编程索引API和质量索引器来创建初始索引。一旦你有了初始索引,并且你使用了增量索引,索引将保持与数据库更改同步(通过Hibernate/JPA API提供更改)。

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

+0

嗨哈代,谢谢你的回答:)我唯一做的索引是:在类的顶部写入'@ indexed',并为每个我写的字段写入'@Field(index = Index.YES,analyze = Analyze.NO,store = Store.NO)'我使用的是MongoDB,我想实现一个非常简单的查询,如“SELECT City FROM Users WHERE UserID = ***”。我应该控制哪个日志文件?为lucene我有一个目录,他们都看起来像[这](http://babakbsn.persiangig.com/luke.png) – TangoStar

+0

我写了另一个[发布](http://stackoverflow.com/questions/18444717)/fulltext-search-in-mongodb-using-hibernate-ogm),可能会找到更多信息 – TangoStar

+1

Luke的屏幕截图没有显示任何文件,因此您需要先索引。如果您想索引现有数据库中的数据,请查看http://docs.jboss.org/hibernate/stable/search/reference/zh-CN/html_single/#manual-index-changes。如果您从空数据库开始,则需要通过JPA/Hibernate API插入数据,并依靠自动索引更新。您不能将Hibernate Search指向现有的数据库,并期望事情能够发挥作用。在某个阶段,需要先建立索引。 – Hardy