Hibernate搜索-应用facet后是否可以获得新的Lucene查询?
将生成Lucene查询,如下所示:Hibernate搜索-应用facet后是否可以获得新的Lucene查询?,lucene,hibernate-search,Lucene,Hibernate Search,将生成Lucene查询,如下所示: Query luceneQuery = builder.all().createQuery(); 然后应用面 我不确定当应用facet时,luceneQuery是否会与其他查询进行and和OR运算,从而生成一个新的Lucene查询。或者,可能会对原始查询应用一组位集来优化结果。(我不知道) 如果生成了一个新查询,我想检索它。如果不是,我需要重新思考。这是问题的关键 原因: 我正在对具有多个可能值的字段应用分面搜索 例如,TMovie.class多对多TTag
Query luceneQuery = builder.all().createQuery();
然后应用面
我不确定当应用facet时,luceneQuery是否会与其他查询进行and和OR运算,从而生成一个新的Lucene查询。或者,可能会对原始查询应用一组位集来优化结果。(我不知道)
如果生成了一个新查询,我想检索它。如果不是,我需要重新思考。这是问题的关键
原因:
我正在对具有多个可能值的字段应用分面搜索
例如,TMovie.class多对多TTag.class(多值方面)
我在TMovie上过滤,其中TTag是一些值
无论如何,过滤是有效的,但是存在一个已知的问题,即返回的方面计数不正确。
详情如下:及
我正在使用此解决方案:
(见第条下对新API的评论)
位集解决方案(至少在本例中)基于原始Lucene查询生成计数。这很好用。然而
如果对原始查询应用替代(不同,而不是TTAG)方面,则会出现一些复杂情况。
位集解决方案根据原始Lucene查询进行计算。它不计算lucene查询,而lucene查询现在通过应用替代facet(一个不同的facet选择)而减少(甚至TTag facet本身)。即,计数计算与应用的任何其他面无关
所以
A.应用facet后,我可以获得新的Lucene查询吗?应用于此的位集解决方案是正确的
B.还有其他建议吗
非常感谢。。欢迎大家发表意见
John关于第一个问题,应用方面并不是修改原始查询,它使用一个名为FacetCollector的自定义收集器-请参阅。在引擎盖下,收集器使用Lucene FieldCache进行方面计数。这也是多值刻面限制的根源。FieldCache不支持每个字段有多个值 无论如何,在刻面过程中不会应用其他查询,并且原始查询不会被修改。当然,好处在于性能。您所指的解决方案可能也可以工作,但依赖于运行多个查询。但是,对于您的用例来说,这可能是一个有效的解决方案。在这里发布了一个解决方案(各种各样):