2011-02-05 51 views
2

有人能幫助,我試圖用Hibernate Search的一個簡單的例子,但得到以下錯誤:Hibernate Search的錯誤

Exception in thread "main" org.hibernate.HibernateException: could not init listeners 
    at org.hibernate.event.EventListeners.initializeListeners(EventListeners.java:205) 
    at org.hibernate.cfg.Configuration.getInitializedEventListeners(Configuration.java:1396) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1385) 
    at FirstExample.main(FirstExample.java:32) 
Caused by: java.lang.NullPointerException 
    at java.io.Reader.<init>(Reader.java:61) 
    at java.io.InputStreamReader.<init>(InputStreamReader.java:55) 
    at org.hibernate.search.util.HibernateSearchResourceLoader.getLines(HibernateSearchResourceLoader.java:52) 
    at org.apache.solr.analysis.StopFilterFactory.inform(StopFilterFactory.java:53) 
    at org.hibernate.search.impl.SolrAnalyzerBuilder.buildAnalyzer(SolrAnalyzerBuilder.java:79) 
    at org.hibernate.search.impl.InitContext.buildAnalyzer(InitContext.java:185) 
    at org.hibernate.search.impl.InitContext.initLazyAnalyzers(InitContext.java:155) 
    at org.hibernate.search.impl.SearchFactoryImpl.initDocumentBuilders(SearchFactoryImpl.java:541) 
    at org.hibernate.search.impl.SearchFactoryImpl.<init>(SearchFactoryImpl.java:171) 
    at org.hibernate.search.event.ContextHolder.getOrBuildSearchFactory(ContextHolder.java:60) 
    at org.hibernate.search.event.FullTextIndexEventListener.initialize(FullTextIndexEventListener.java:122) 
    at org.hibernate.event.EventListeners$1.processListener(EventListeners.java:198) 
    at org.hibernate.event.EventListeners.processListeners(EventListeners.java:181) 
    at org.hibernate.event.EventListeners.initializeListeners(EventListeners.java:194) 
    ... 3 more 

我的物品類別:

@Indexed 
@AnalyzerDef(name="customanalyzer", 
     tokenizer = @TokenizerDef(factory = StandardTokenizerFactory.class), 
     filters = { 
       @TokenFilterDef(factory = ISOLatin1AccentFilterFactory.class), 
       @TokenFilterDef(factory = LowerCaseFilterFactory.class), 
       @TokenFilterDef(factory = StopFilterFactory.class, params = { 
        @Parameter(name="words", value= "org/hibernate/search/test/analyzer/solr/stoplist.properties"), 
        @Parameter(name="ignoreCase", value="true") 
       }) 
}) 


public class Item 
{ 
    @DocumentId 
     private Integer id; 

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

     @Field @Analyzer(definition = "customanalyzer") 
     private String description; 

     @Field(index=Index.UN_TOKENIZED, store=Store.YES) 
     private String ean; 

     private String imageURL; 
     //public getters and setters 
} 

程序代碼:

Session session = null; 
     Transaction tx = null; 

      SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); 
      session =sessionFactory.openSession(); 
      FullTextSession ftem = org.hibernate.search.Search.getFullTextSession(session); 

      ftem.beginTransaction(); 
      List <Item> AllItem=session.createQuery("From Item").list(); 

      for (Item item : AllItem) { 
        ftem.index(item); 
      } 
      ftem.getTransaction().commit(); 



      String searchQuery = "title:Batman"; 

      QueryParser parser = new QueryParser( 
        "title", 
        ftem.getSearchFactory().getAnalyzer("customanalyzer") 
     ); 
      org.apache.lucene.search.Query luceneQuery; 
      try { 
       luceneQuery = parser.parse(searchQuery); 
      } 
      catch (ParseException e) { 
        throw new RuntimeException("Unable to parse query: " + searchQuery, e); 
      } 

      org.hibernate.Query query = ftem.createFullTextQuery( 
        luceneQuery, 
        Item.class); 
      query.setFirstResult(20).setMaxResults(20); 
      List results = query.list(); 

回答

0

看起來Hibernate Search在類路徑中找不到org/hibernate/search/test/analyzer/solr/stoplist.properties。確保它在那裏。

+0

你知道我應該放哪個罐子嗎? – Noor 2011-02-05 10:21:36