Java 使用Hibernate搜索在多值应用程序上添加镶嵌面

Java 使用Hibernate搜索在多值应用程序上添加镶嵌面,java,lucene,hibernate-search,Java,Lucene,Hibernate Search,我们在应用程序中使用Hibernate搜索。我们使用刻面。最近我们发现了一个很大的局限性。在Hibernate搜索中,对可能有多个值的字段进行分面处理无法正常工作-如果文档对分面字段有多个值(例如,多个类别),则只考虑其中一个值 我目前可以想到两种解决方案: 使用bobo浏览(http://code.google.com/p/bobo-browse/) 索尔(http://lucene.apache.org/solr/) 在这两种解决方案中,我们继续使用Hibernate搜索来维护索引,并像

我们在应用程序中使用Hibernate搜索。我们使用刻面。最近我们发现了一个很大的局限性。在Hibernate搜索中,对可能有多个值的字段进行分面处理无法正常工作-如果文档对分面字段有多个值(例如,多个类别),则只考虑其中一个值

我目前可以想到两种解决方案:

  • 使用bobo浏览(http://code.google.com/p/bobo-browse/)
  • 索尔(http://lucene.apache.org/solr/)
在这两种解决方案中,我们继续使用Hibernate搜索来维护索引,并像以前一样进行查询(使用Hibernate搜索),并在需要时为刻面运行额外的bobo browse或solr查询(bobo browse或solr将以某种“只读”方式使用索引)。问题是我们经常更新索引,并且希望在刻面查询中获得真正新鲜的数据。Bobo browse不会自动与Hibernate搜索集成,为了使搜索保持最新,我可能会遇到一些问题(例如)。文档看起来有点凌乱,尚未完成。另一方面,Solr似乎是一个需要添加的非常大的东西,只是为了让刻面工作正常。我仍然担心在更新/刷新索引时可能会遇到一些问题


你有这方面的经验吗?有什么建议吗?

作为一名Hibernate搜索开发人员,我建议加入我们,帮助实现您需要的功能

我们中没有人真正需要多值切面,因此我们也不确定选择哪种解决方案;看来你有一个真正的需求,那就是探索替代方案并尝试它们

Hibernate搜索已经依赖于许多Solr模块,特别是因为有大量优秀的分析器。我相信我们可以找到一种方法来嵌入Solr的刻面逻辑,并将其很好地打包到我们的一致API中,而不需要在服务器模式下实际启动Solr

我想我们可以用Bobo browse做同样的事情;我宁愿Solr不添加其他依赖项,但如果bobo browse证明了一个更好的解决方案,为什么不。。但是你可以在这个选择上帮助我们

你会得到什么作为交换

  • 我们将维护它:兼容性将与任何未来版本保持一致。希望你能帮点忙
  • 来自其他用户的永恒感谢;)
  • 来自成千上万其他用户的岩石固体测试
  • 来自..的错误修复和改进
  • 你简历上的摇滚明星徽章
需要什么

  • 单元测试
  • 文件更新
  • 合理代码

我还将Bobo Browse与Hibernate搜索结合使用。我也有定期更新和只读问题的问题。Bobo并不是最简单的库,我已经多次研究了与Hibernate搜索集成的方法,但由于其复杂性而放弃了

我使用定时重新加载索引以确保新鲜度,但这会产生大量要收集的垃圾。随着时间的推移,Lucene优化了重新打开IndexReader的过程,但Bobo团队并没有真正致力于支持这一过程。描述此问题


Hibernate搜索基础架构应该提供足够的灵活性来集成。Zoie是一个与Hibernate Search类似的实时索引系统,它与Bobo集成,也许它可以激发您的努力

这是Hibernate Search的多值方面计数问题的某种解决方案

博客:

该博客包含一个Java类,可以重用该类为单值和多值字段生成方面计数

提供的解决方案基于此处提供的位集解决方案:

这个博客有一个Maven项目,它非常全面地演示了解决方案。该项目演示了如何使用hibernate search faceting API来筛选

日期范围、1对多(单值)刻面组和多对多(多值)刻面组的组合

然后调用该解决方案,以正确导出每个方面组的方面计数

该解决方案促进了与此JSFIDLE仿真类似的结果:(除了仿真没有演示范围刻面)

JSFIDLE是一个更大的博客的一部分,该博客探讨了方面搜索的一般概念:。如果你和我一样,发现刻面搜索的整个概念非常混乱,那么这将有所帮助

这可能不是世界上最好的解决方案,所以请随时反馈