Java hibernate搜索lucene索引上的4个不同结果

Java hibernate搜索lucene索引上的4个不同结果,java,hibernate,lucene,hibernate-search,Java,Hibernate,Lucene,Hibernate Search,在关系数据库中,有一些规范化的表,而实际上与我相关的数据存储在一个视图中,这个视图非常大(大约1.2亿行,80列)。 80列中约有10列与搜索问题相关,这些问题将使用hibernate search 4.3.2实现。 在我看来,通过索引视图实体并只查询80个所需列(@Field annotation)中的10个,我得到了大量冗余数据,这些数据仅通过主键进行区分。 目前我做了以下工作: ScrollableResults ids = fullTextSession.createCriteria(

在关系数据库中,有一些规范化的表,而实际上与我相关的数据存储在一个视图中,这个视图非常大(大约1.2亿行,80列)。
80列中约有10列与搜索问题相关,这些问题将使用hibernate search 4.3.2实现。
在我看来,通过索引视图实体并只查询80个所需列(@Field annotation)中的10个,我得到了大量冗余数据,这些数据仅通过主键进行区分。
目前我做了以下工作:

ScrollableResults ids = fullTextSession.createCriteria(clazz)
            .addOrder(Order.asc("id"))
            .add(Restrictions.ilike(field, query))
            .add(Projections.distinct(Projections.id()))
            .setProjection((Projections.distinct(Projections.id())))
            .scroll(ScrollMode.FORWARD_ONLY);

ArrayList<String> results = new ArrayList<String>();

while (ids.next()) {
        ScrollableResults redundantResults = fullTextSession.createCriteria(clazz)
                .add(Restrictions.idEq(ids.get(0)))
                .setProjection(Projections.projectionList()
                        .add(Projections.property("name"))
                        .add(Projections.property("city"))
                        .add(Projections.property("postal"))
                )
                .scroll(ScrollMode.FORWARD_ONLY);
        if (redundantResults.next())
            results.add((String) redundantResults.get(0));
    }
ScrollableResults ID=fullTextSession.createCriteria(clazz) .addOrder(Order.asc(“id”)) .add(Restrictions.ilike(字段,查询)) .add(projects.distinct(projects.id())) .setProjection((projects.distinct(projects.id())) .scroll(仅限滚动模式、前进模式); ArrayList结果=新建ArrayList(); while(ids.next()){ ScrollableResults redundantResults=fullTextSession.createCriteria(clazz) .add(Restrictions.idEq(ids.get(0))) .setProjection(Projections.projectionList()项目) .add(Projections.property(“名称”)) .add(项目、地产(“城市”)) .add(Projections.property(“postal”)) ) .scroll(仅限滚动模式、前进模式); if(redundantResults.next()) 添加((字符串)redundantResults.get(0)); } 我知道我一定是出了什么差错,我的意图是:
1.获取一组不同的对象,与我的搜索条件相匹配
2.仅使用lucene索引获取它们,因为DB查询过于昂贵
虽然获取不同ID的步骤似乎在性能上非常好,但是从文档中获取属性数据的第二步非常慢。在我看来,在这两个步骤中都没有对DB进行任何查询,这符合我的意图。
我认为投影是处理lucene索引和避免对DB进行hibernate查询的唯一方法,还是我错了? 我很感激任何关于如何提高搜索性能的建议