休眠搜索,空间查询和新的lucene空间模块

时间:2013-01-10 13:49:37

标签: hibernate solr lucene spatial hibernate-search

我想在Hibernate中执行空间搜索。特别是,我想存储一些纬度/经度的项目,然后查询哪些项目在给定点的x km范围内。

我发现hibernate-search通过它的Lucene集成提供了support for spatial queries

我也知道Lucene的空间模块在Lucene 4.0版中已经completely rewritten,但最新版本的hibernate-search使用的是Lucene的Lucene 3.6.2。

所以,我有几个问题:

  1. 是否使用现已弃用的lucene空间模块进行hibernate-search中的空间支持?
  2. 或者hibernate-search是否使用solr的空间模块?
  3. lucene空间被重写的原因之一是因为它不可靠/错误。这是否意味着hibernate-search中的空间查询不可靠?
  4. 在将来的版本中是否会更改hibernate-search以支持新的lucene-spatial模块? (基于spatial4j
  5. 假设将来hibernate-search将升级为Lucene 4+,新版本中的空间查询是否可能向后兼容当前的hibernate-search API?

1 个答案:

答案 0 :(得分:4)

  1. 不是没有,我们幸运的是,由于同样的原因,我们有幸让一个地理位置专家加入团队:Nicolas想避免在Lucene中使用空间模块,因为它存在问题。

  2. 不,它是一组自定义的Lucene组件; Hibernate Search的嵌入式特性使我们的要求非常简单,至少在Lucene集成方面(距离数学仍然很有趣)。

  3. 从原始模块的灵感和动机到创建新扩展的限制,所以我不相信,假设它与我们谈论的已知限制相同。

  4. 很有可能,我们在这一点上的重点是提供合理且实用的API;由于今天涵盖的功能相对简单,我们可能不需要急于使用它,但我们不排除集成它。 Hibernate ORM也计划为Spatial类型提供更好的支持,因此我们可能希望集成自定义类型:欢迎使用help和advise,即使只是在用例或愿望表单中。

  5. 过去我们对API稳定性感到非常自豪,并会努力保持记录。我们肯定会升级到Lucene 4+,但这可能不得不打破一些API(不一定与Spatial相关)。我们将努力将变化保持在最低限度。这是不暴露太多的原因之一:确保我们保持实施的灵活性,至少现在我们正在准备升级。