java - ElasticSearch 可扩展性设计 Java WebService

标签 java elasticsearch

我目前正在设计一个小项目,想就如何最好地使其更符合 future 需要一些建议。

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

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

我的计划是用CXF开放为web服务,java中间层做业务逻辑,后面elasticsearch存储和查询数据。

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

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

干杯, 罗布

最佳答案

我看过一些比较,说在 ElasticSearch 中,索引相当于数据库,表格相当于类型。

我认为您基本上可以通过两种不同的方式来解决这个问题。

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

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


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

  • 支持多种类型映射。
  • 可以对公共(public)字段进行不同的分析。
  • 理论上,每个文档都具有映射的所有字段。

无论采用哪种方法,您都可以搜索所有子类型。我认为搜索请求的复杂性将取决于应用程序。

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

当您实现它时,我很想听听它的效果。

关于java - ElasticSearch 可扩展性设计 Java WebService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164080/

相关文章:

java - Docker jetty容器JVM内存分配

angularjs - Kibana 6.1.1自定义插件(可视化)

java - 如何将 mysql 中的数据插入组合框?

java - Android 打开 Activity 并关闭上一个 Activity

java - 将 'bits' 写入 C++ 文件流

macos - 无法在Kibana上安装样本数据集-禁止的错误

ElasticSearch - 字符串连接聚合?

elasticsearch - Elasticsearch:聚合准确性

elasticsearch - Elasticsearch过滤的聚合,返回的存储桶 key 未专门拆分

具有类和嵌套静态接口(interface)的 Java 泛型