2012-08-01 5 views
1

Je viens de créer une recherche de texte intégral hibernate en utilisant hibernate-search-4.1.1.Final.jar et toutes les dépendances d'exécution. Il n'y a aucune erreur dans cette application. Mais ma requête Lucene ne contenant pas la requête DSL ne renvoie aucun résultat. Je veux dire ne renvoie aucune ligne dans la table. quelqu'un peut m'aider s'il vous plaît.Hibernate Recherche plein texte

Programme de recherche principal Ce code Java est utilisé pour effectuer une recherche de texte intégral en mode hibernation.

public class MainSearch { 
       public static void main(String args[]) { 
      Iterator iterator; 
      Session session = HibernateUtil.getSession(); 
      // FullTextSession fullTextSession = Search.getFullTextSession(session); 

      FullTextSession fullTextSession = Search.getFullTextSession(session); 
      org.hibernate.Transaction tx = fullTextSession.beginTransaction(); 

      // create native Lucene query unsing the query DSL 
      // alternatively you can write the Lucene query using the Lucene query 
      // parser 
      // or the Lucene programmatic API. The Hibernate Search DSL is 
      // recommended though 
      QueryBuilder qb = fullTextSession.getSearchFactory() 
        .buildQueryBuilder().forEntity(Book.class).get(); 
      org.apache.lucene.search.Query query = qb.keyword() 
        .onFields("title", "subtitle", "authors.name").matching("cpp") 
        .createQuery(); 

      // wrap Lucene query in a org.hibernate.Query 
      org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(
        query, Book.class); 

      // execute search 

      List result = hibQuery.list(); 
      iterator = result.iterator(); 
      while (iterator.hasNext()) { 
       System.out.print(iterator.next() + " "); 
      } 
      System.out.println(); 
      // Check list empty or not 
      if (result.isEmpty()) { 
       System.out.println("Linked list is empty"); 
      } 

      tx.commit(); 
      session.close(); 
     } 
    } 
+0

http://stackoverflow.com/questions/9488094/ hibernate-mssql-fulltext-recherche-via-contient même problème résolu – user1817599

Répondre

2

Vous n'avez rien inclus dans la base de données (dans votre code). Si vous l'avez fait en dehors de votre code, vous devez indexer la base de données avant de pouvoir rechercher. Pour ce faire, exécutez ceci:

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

Et vous n'avez pas besoin d'une opération ouverte pour rechercher des choses, de sorte que vous pouvez supprimer cette ligne org.hibernate.Transaction tx = fullTextSession.beginTransaction(); (et le remplacer par l'un au-dessus startAndWait())

Référence: http://hibernate.org/search/documentation/getting-started/#indexing (puisque Lucene ne connaît pas votre SGBD et vice-versa, Hibernate Search est le lien entre eux et l'indexation de vos données est ce qui le rend consultable par Lucene)