ElasticSearch设计可扩展性Java WebService

时间:2011-11-17 08:26:45

标签: java elasticsearch

我目前正在设计一个小项目,并希望就如何最好地使其更具未来性证明提出一些建议。

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

然后,我会在相应的表上进行联接以搜索信息。

我的计划是使用CXF将其作为Web服务,用于业务逻辑的java中间层和后面的弹性搜索来存储和查询数据。

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

对于elasticsearch,处理对象中的身份信息的最佳方式是什么。是否最好将_id映射到每个对象的id字段或存储我自己的id字段?

干杯, 罗布

1 个答案:

答案 0 :(得分:1)

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

我认为你可以基本上采用两种不同的方式。

选项1:一个索引和一个类型。活动的每个子类型都被索引到ES中的一个类型,有些文档缺少字段。
这样就可以了,

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


选项2:一个索引和多个类型。 Activity的每个扩展都是ElasticSearch中的一种类型。

  • 支持许多类型映射。
  • 可以区别对常见字段进行分析。
  • 理论上,每个文档都包含映射的所有字段。

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

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

当你实施它时,我很想知道它是如何实现的。