2016-11-08 2 views
0

Hibernate Searchクエリを使用して特定の列を取得する必要があります。私は予測を試みたが、うまくいかなかった。これを達成するために私を助けてください、アドバイスや提案をいただければ幸いです。 私のクエリは次のとおりです。hibernate lucene searchを使用してテーブルから特定の列を取り出す方法は?

 FullTextSession fullTextSession = Search.getFullTextSession(session); 
    QueryBuilder b = fullTextSession.getSearchFactory() 
      .buildQueryBuilder().forEntity(Company.class).get(); 
     org.apache.lucene.search.Query luceneQuery = 
      b.keyword() 
       .onFields("company_name","city") 
       .matching("search keyword here!") 
       .createQuery(); 
     org.hibernate.Query fullTextQuery=fullTextSession.createFullTextQuery(luceneQuery).setProjection().setProperties("company_name");  
     List result = fullTextQuery.list(); 
+0

あなたは私たちがおそらくしたい場合は、私たちに突起クエリを表示する必要がありますなぜそれがうまくいかないのかを提案してください。また、まず、 "new org.apache.lucene.search.MatchAllDocsQuery()"をluceneQueryとして使用して、何が投影されるのかを確認すると便利です。 – Sanne

+0

あなたの情報のためにThannak –

答えて

0

プロジェクションを使用できます。 しかし、その前に、あなたがプログラムで= Store.yes

@Field(store=Store.YES) 
private String name; 

ストアを使用して、その列の値を格納する必要があり、あなたが投影を使用することができます

Session session = sessionFactory.openSession(); 

FullTextSession fullTextSession = Search.getFullTextSession(session); 
fullTextSession.createIndexer().startAndWait(); 

QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Employee.class).get(); 
org.apache.lucene.search.Query luceneQuery = queryBuilder.keyword().onFields("name").matching(name).createQuery(); 
org.hibernate.search.FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery, Employee.class); 
fullTextQuery.setProjection("name"); 

List list = fullTextQuery.list(); 
+0

お返事ありがとうございます@vrb –

+0

あなたはhttp://vishalbiradar.blogspot.inでコードを見つけることができます – vrb

関連する問題