java - hibernate 搜索错误

标签 java hibernate lucene hibernate-search

有人可以帮忙吗,我正在尝试一个简单的 hibernate 搜索示例,但出现以下错误:

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();

最佳答案

看起来 Hibernate Search 在类路径中找不到 org/hibernate/search/test/analyzer/solr/stoplist.properties。确保它在那里。

关于java - hibernate 搜索错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4906202/

相关文章:

java - 实例化一个类的两个实例

C# NET 应用程序未关闭 Java 进程

lucene - 如何在 Elasticsearch 中始终推荐不同的文档(文件)

java - 为什么字符串数组可以分配给对象数组,但字符串数组列表不能分配给对象数组列表?

java - 实体继承: central table with common values + extended father entity

java - 根据用户的本地时区在特定时间执行日常操作

javascript - Lucene 搜索以查找文件夹中 2 种特定内容模型类型中的任意一种

java - 使用 lucene SynonymFilter 时无法对单词进行标记

java - 如何用Spring切换动态事务?

java - 创建名为“entityManagerFactory”的 bean 时出错,无法正常运行应用程序