2012-05-12 2 views
0

Я построил пример проекта для поиска в спящем режиме, и он отлично работает без каких-либо исключений, но когда я ищу строку, у которой есть некоторые объекты с этой строкой, она возвращает пустое. Я не знаю, что мне делать !!! Может кто-нибудь помочь мне ... Проект основан на maven, и я использую аннотацию спящего режима как для спящего режима, так и для спящего режима. Вот мой hibernate.cfg.xml файл:Hibernate Search Не вернет правильные результаты

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
             "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.url"> 
      jdbc:mysql://localhost:3306/eprnews 
     </property> 
     <property name="hibernate.connection.username">root</property> 
     <property name="hibernate.connection.password">***</property> 
     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
     <property name="hibernate.show_sql">true</property> 
     <property name="hibernate.bytecode.use_reflection_optimizer">false</property> 
     <!-- 
     <property name="hibernate.hbm2ddl.auto">create-drop</property> 

     Hibernate Search --> 
     <!-- org.hibernate.search.store.FSDirectoryProvider --> 
     <!-- org.hibernate.search.store.RAMDirectoryProvider for test --> 
     <!-- 
     <property name="hibernate.search.default.directory_provider">org.hibernate.search.store.FSDirectoryProvider</property> 
     --> 
     <property name="hibernate.search.default.directory_provider">filesystem</property> 
     <property name="hibernate.search.default.indexBase">./indexes</property> 
     <!-- 
     --> 
     <property name="hibernate.search.worker.execution">async</property> 
     <property name="hibernate.search.default.optimizer.transaction_limit.max">100</property> 

     <!-- Mapped classes --> 
     <mapping class="net.leemoo.test.entity.NewsEntity"/> 
    </session-factory> 
</hibernate-configuration> 

и вот моя сущность:

@Entity 
@Table(name="news") 
@Indexed 
@AnalyzerDef(
      name = "PersianAnal", 
      charFilters = @CharFilterDef(factory = PersianCharFilterFactory.class), 
      tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), 
      filters={ 
         @TokenFilterDef(factory = ArabicNormalizationFilterFactory.class), 
         @TokenFilterDef(factory = PersianNormalizationFilterFactory.class) 
        } 
      ) 
public class NewsEntity { 

    @Id 
    @GeneratedValue 
    private Long id; 

    @Field 
    @Analyzer(definition="PersianAnal") 
    private String title; 

    @Field 
    @Analyzer(definition="PersianAnal") 
    private String newsAbstract; 

    @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO) 
    @Analyzer(definition="PersianAnal") 
    private String content; 

    @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO) 
    @DateBridge(resolution=Resolution.DAY) 
    private Date creationDate; 

    @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO) 
    @DateBridge(resolution=Resolution.DAY) 
    private Date modifiedDate; 

    private Integer viewsCounter; 

    @Field 
    @Analyzer(definition="PersianAnal") 
    private String keywords; 

    private Boolean jqueryNews; 

    private Boolean photoNews; 
     and setters and getters... 

и это код, который я использую для поиска:

Session session = HibernateUtil.getSessionFactory().openSession(); 

     session.beginTransaction(); 
     FullTextSession fullTextSession = Search.getFullTextSession(session); 
     try { 
//   fullTextSession.createIndexer().startAndWait(); 
      QueryBuilder gb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(NewsEntity.class).get(); 
      Query query = gb.keyword(). 
       onFields("title", "newsAbstract", "content"). 
       matching("test").createQuery(); 
      org.hibernate.Query hibQuery = fullTextSession.createFullTextQuery(query, NewsEntity.class); 
      List<NewsEntity> result = (List<NewsEntity>)hibQuery.list(); 
      System.out.println(result.size()); 
     } catch (Exception e) { 
//   e.printStackTrace(); 
     } 

     session.getTransaction().commit(); 
     session.close(); 

Что я должен делать? Пожалуйста, помогите мне ....

ответ

0

Я думаю, что я сделал глупую ошибку в том, что я прокомментировал создателя индекса в последней кодовой фразе. Я должен запустить его один раз в начале для создания индексов. Я снова сожалею, что не торопился.