2013-08-21 241 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