使用Hibernate Search将多面体添加到应用程序中

时间:2012-10-01 13:31:18

标签: java lucene hibernate-search

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

我现在可以想到两个解决方案:

  • 使用bobo-browse(http://code.google.com/p/bobo-browse/)<< li>
  • solr(http://lucene.apache.org/solr/)<< li>

在这两个解决方案中,我们继续使用Hiberante Search维护索引,并像以前一样进行查询(使用Hiberante Search),并在需要时运行其他bobo-browse或solr查询(需要bobo-browse或solr)索引以“只读”方式进行。问题是我们经常更新索引,并希望在分面查询中获得真正新鲜的数据。 Bobo-browse不会自动与Hiberante Search集成,为了使搜索保持最新,我可能会遇到一些问题(例如https://groups.google.com/forum/?fromgroups=#!topic/bobo-browse/sn_Efc-YClU)。该文档看起来有些凌乱,尚未完成。另一方面,Solr似乎是一个非常重要的事情,只是为了让分面正常工作。我仍然担心更新/刷新索引可能会遇到一些问题。

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

3 个答案:

答案 0 :(得分:1)

作为Hibernate Search开发人员,我建议加入我们并帮助实现您的需求。

我们当中没有人真正需要多元化的分面,所以我们不确定选择哪种解决方案;看来你有一个真正的需要,这是探索替代方案并尝试它们的完美选择。

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

我想我们可以用Bobo-browse做同样的事情;我更喜欢Solr不添加其他依赖项,但如果bobo-browse证明了一个优秀的解决方案,为什么不...但你可以帮助我们做出这个选择。

你会得到什么交换?

  • 我们会维护它:兼容性将保留在任何未来的版本中。希望你会有所帮助。
  • 来自其他用户的永恒感激;)
  • 来自数千名其他用户的坚如磐石的测试
  • 错误修正和改进来自..
  • 您的简历上的摇滚明星徽章

需要什么?

  • 单元测试
  • 文档更新
  • 明智的代码

https://community.jboss.org/wiki/ContributingToHibernateSearch

答案 1 :(得分:0)

我还将Bobo Browse与Hibernate Search结合使用。我也有定期更新和只读问题的问题。 Bobo不是最简单的库,我已经多次查看与Hibernate Search集成的方法,因为复杂性而放弃了。

我使用索引的定时重新加载以确保新鲜度,但这会产生大量垃圾。 Lucene随着时间的推移优化了重新打开索引读取器的过程,但Bobo团队并没有真正专注于支持它。 https://linkedin.jira.com/browse/BOBO-31描述了这个问题。

Hibernate Search基础架构应该提供足够的集成灵活性。 Zoie是一个实时索引系统,如Hibernate Search与Bobo集成https://linkedin.jira.com/wiki/display/BOBO/Realtime+Faceting+with+Zoie也许它可以激发你的努力

答案 2 :(得分:0)

这是针对hibernate-search的多值facet-count问题的解决方案。

博客:http://outbottle.com/hibernate-search-multivalue-facet-counts/

博客上有一个Java类,可以重复使用它来为单值和多值字段生成构面计数。

提供的解决方案基于此处提供的BitSet解决方案:http://sujitpal.blogspot.ie/2007/04/lucene-search-within-search-with.html

该博客有一个Maven项目,该项目非常全面地展示了该解决方案。该项目演示了使用hibernate-search faceting API过滤....

日期范围和1对多(单值)构面组和多对多(多值)构面组合。

然后调用解决方案以正确导出每个facet-group的facet-count。

该解决方案有助于获得类似于此jsFiddle仿真的结果:http://goo.gl/y5C9UO(仿真不会演示范围刻面)。

jsFiddle是一个更大的博客的一部分,该博客一般探讨了分面搜索的概念:http://outbottle.com/understanding-faceted-searching/。如果你像我一样,并且发现分面搜索的整个概念相当令人困惑,那么这将有所帮助。

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