如何优化hibernate lucene获取记录时间

时间:2017-09-06 15:12:04

标签: mysql spring-mvc lucene hibernate-search

我正在使用布尔搜索来执行hibernate lucene来从数据库中获取记录。在我的表中有250条记录。我认为这不是hibernate lucene的问题。但是什么' s发生的是,它需要1.30分钟到2.30分钟。

我的流量来自我的控制器我获得了一些搜索关键字,我将其传递给服务然后传递给dao。在服务层我开始了事务。最后Dao将返回Listof记录。记录我将该列表设置为XYZTableVo对象列表。

我不知道在lucene或VO的对象准备中到底在哪里。 以下是我的代码段

Session session = getSession();     
    FullTextSession fullTextSession = Search.getFullTextSession(session);
    SearchFactory searchFactory = fullTextSession.getSearchFactory();
    fullTextSession
    .createIndexer(XYZTable.class)
    .typesToIndexInParallel(20)
    .batchSizeToLoadObjects(25)
    .cacheMode(CacheMode.NORMAL)
    .threadsToLoadObjects(5)
    .startAndWait();
    searchFactory.optimize(CvlizerJobseeker.class);
    MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[] { "Skills.skill" },
            new StandardAnalyzer());
    parser.setDefaultOperator(Operator.OR);
    org.apache.lucene.search.Query luceneQuery = null;
    QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(XYZTable.class)
            .get();
    BooleanQuery boolQuery = new BooleanQuery();
    if (locationList != null) {
        if (locationList.get(2) != null) {
            boolQuery.add(qb.keyword().onField("XYZTablePersonalInfo.XYZTableAddress.postalCode")
                    .matching(locationList.get(2)).createQuery(), BooleanClause.Occur.MUST);
        }
        else if (locationList.get(1) != null) {
            boolQuery.add(qb.keyword().onField("XYZTablePersonalInfo.XYZTableAddress.city")
                    .matching(locationList.get(1)).createQuery(), BooleanClause.Occur.MUST);
        }
    }
    if (StringUtils.isEmpty(query) != true && StringUtils.isBlank(query) != true) {
        try {
            luceneQuery = parser.parse(query.toUpperCase());
        } catch (ParseException e) {
            luceneQuery = parser.parse(parser.escape(query.toUpperCase()));
        }
        boolQuery.add(luceneQuery, BooleanClause.Occur.MUST);
    }
    boolQuery.add(qb.keyword().onField("isValid").matching(false).createQuery(), BooleanClause.Occur.MUST);
    FullTextQuery createFullTextQuery = fullTextSession.createFullTextQuery(boolQuery, XYZTable.class);
createFullTextQuery.list();

0 个答案:

没有答案