【发布时间】:2013-10-17 12:02:16
【问题描述】:
一个 Lucene 查询是这样生成的:
Query luceneQuery = builder.all().createQuery();
然后应用构面。
我不确定当应用构面时,luceneQuery 是否与其他查询进行了 AND 运算和 ORed 运算,从而产生了一个新的 Lucene 查询。或者,也许将一堆 BitSet 应用于原始查询以优化结果。 (我不知道)。
如果生成了新查询,我想检索它。如果没有,我需要重新考虑。这就是问题的症结所在。
原因:
我正在对具有多个可能值的字段应用分面搜索。
例如TMovie.class 多对多 TTag.class (multiple-value-facet)
我正在过滤 TMovie,其中 TTag 是一些值。
无论如何,过滤是有效的,但存在一个已知问题,即返回的 Facet-counts 不正确。 详细在这里:Add faceting over multivalued to application using Hibernate Search和https://forum.hibernate.org/viewtopic.php?f=9&t=1010472
我正在使用这个解决方案: http://sujitpal.blogspot.ie/2007/04/lucene-search-within-search-with.html(见文章下对新API的评论)
BitSet 解决方案(至少在本示例中)基于原始 Lucene 查询生成计数。这完美地工作。然而.....
如果将备用(不同,而不是 TTags)方面应用于原始查询,则会出现一些复杂情况。 Bitset 解决方案在原始 Lucene 查询上进行计算。它不会计算现在通过应用备用 Facet(不同的 FacetSelection)(或者甚至 TTag Facets 本身)减少的 lucene 查询。 IE。计数计算与应用的任何其他 FacetSelection Facet 无关。
所以...
A.我可以在应用构面后获取新的 Lucene 查询吗?应用于此的 BitSet 解决方案是正确的。
B.还有其他替代建议吗?
非常感谢.. 欢迎所有 cmets。
约翰
【问题讨论】:
-
在这里发布了一个解决方案(各种):stackoverflow.com/questions/12674316/…