2

我目前正在设计一个小项目,并希望获得一些关于如何最好地使其更具未来性的建议。

我有一个基本的对象 Activity 和它的扩展。在一个直接的数据库世界中,我可能有一个活动表,每个扩展都有一个表和一个活动扩展连接表。

然后我会在适当的表上进行连接以搜索信息。

我的计划是使用 CXF 将其作为 Web 服务打开,Java 中间层用于业务逻辑,后面的 elasticsearch 用于存储和查询数据。

那么我的问题是我是否以正确的方式考虑弹性搜索,或者方法(不同的表和连接)完全错误。如果它是正确的,那么在 ElasticSearch 术语中表示不同“表”的最佳方式是什么。

对于弹性搜索来说,处理对象中身份信息的最佳方法是什么。最好将 _id 映射到每个对象中的 id 字段还是存储我自己的 id 字段?

干杯,罗伯

4

1 回答 1

1

我在 ElasticSearch 中看到过比较,索引与数据库相当,表与类型相当。

我认为你可以通过两种不同的方式来解决它。

选项 1:一种索引和一种类型。Activity 的每个子类型在 ES 中都被索引为一种类型,并且有些文档缺少字段。
这会给你,

  • 要支持的一种类型映射,如果默认值不够,您将拥有所有子类型的所有字段。
  • 公共字段必须进行相同的分析。
  • 文档都只有每种类型的字段子集(不是真正的问题,只是奇怪)


方案二:一种索引,多种类型。Activity 的每个扩展都是 ElasticSearch 中的一个类型。

  • 支持许多类型映射。
  • 可以以不同方式分析常见字段。
  • 理论上,每个文档都具有映射的所有领域。

在任一方法中,您都可以搜索所有子类型。我认为搜索请求的复杂性取决于应用程序。

对于大多数应用程序,我想我更喜欢选项 2。 ElasticSearch 中的每个子类型都应该是它自己的“类型”。如果需要,您可以跨类型使用Facets 。如果您的子类型相对简单,我认为您可以设置一个案例选项 1。

当你实施它时,我很想听听它是如何工作的。

于 2011-11-17T23:02:57.790 回答