Java hibernate搜索lucene索引上的4个不同结果
在关系数据库中,有一些规范化的表,而实际上与我相关的数据存储在一个视图中,这个视图非常大(大约1.2亿行,80列)。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(
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查询的唯一方法,还是我错了? 我很感激任何关于如何提高搜索性能的建议