【问题标题】:Hibernate Search on JBoss 7.1.1 Final, Weld and Seam 3JBoss 7.1.1 Final、Weld 和 Seam 3 上的 Hibernate Search
【发布时间】:2012-09-26 21:04:05
【问题描述】:

我正在运行一个使用休眠搜索在系统中查找人员的应用程序。我在 JBoss AS 7.1.1 上运行它,应用程序基于 Seam 3、Weld 和 JSF 2.1。它运行顺利,但经过一些更高的负载后,使用FullTextEntityManager 的页面加载速度非常慢。在某些时候,整个应用程序正在减速。

所以我想到也许我错误地使用了 Hibernate 搜索。我正在使用启动单例来索引数据库:

@Singleton
@Startup
public class Initializer implements Serializable {

    private static final long serialVersionUID = 1L;

    @PersistenceContext
    private EntityManager entityManager;

    @PostConstruct
    public void startup() throws Exception {
        FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(entityManager);
        fullTextEntityManager.createIndexer().startAndWait();
    }

}

然后我在 PrimeFaces 的自动完成组件中使用的方法中使用 FullTextEntityManager

@Session Scoped
public class ... {

        private QueryBuilder queryBuilder;

        @Inject
        private EntityManager entityManager;

        @PostConstruct
        public void initFulltext() {
            fullTextEntityManager = org.hibernate.search.jpa.Search.getFullTextEntityManager(entityManager);
            queryBuilder = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Person.class).get();

        }

        @Override
        @SuppressWarnings("unchecked")
        public List<Person> autocomplete(Object event) throws Exception {
            if (event.toString() != null && !event.toString().trim().isEmpty()) {
                org.apache.lucene.search.Query query = queryBuilder.keyword()
                        .onFields("username", "firstname", "lastname").matching(event.toString())
                        .createQuery();

                FullTextQuery persistenceQuery = fullTextEntityManager.createFullTextQuery(query, Person.class);
                persistenceQuery.setMaxResults(MAX_RESULTS_ON_PAGE);

                return persistenceQuery.getResultList();
            }
            return null;
        }
}

这是在 Java EE 应用程序中正确使用 Hibernate Search 吗?一段时间后,休眠搜索是否可能会尝试同步实体和Lucene索引的更改?如果是这样,会不会对性能造成巨大影响?

【问题讨论】:

    标签: java jboss7.x hibernate-search


    【解决方案1】:

    我想说的是休眠搜索的正确用法。它的字段缓存会降低您的性能。这实际上取决于查询。 阅读第 5.5 节 here ,应该会有所帮助。

    【讨论】:

    • 是的,没有任何方法可以做到这一点。因查询而异。乐意效劳。问候
    • @lukas ,想知道您是否解决了问题?以及如何?
    • 我仍然遇到一些性能问题,所以我没有尝试。一旦我确定我找到了问题的原因,我将把这个功能放回去。目前看来,Hibernate 搜索不是原因。但还不确定
    猜你喜欢
    • 2013-10-31
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多