【问题标题】:searching Mysql table with Elasticsearch使用 Elasticsearch 搜索 Mysql 表
【发布时间】:2023-01-24 17:03:37
【问题描述】:

假设我有以下“费用”MySQL 表:

id amount vendor tag
1 100 google foo
2 450 GitHub bar
3 22 GitLab fizz
4 75 AWS buzz

我正在构建一个 API,它应该根据部分“供应商”或“标签”过滤器返回费用,因此 vendor="Git" 应该返回记录 2 和 3,而 tag ="zz" 应该返回记录 3 和 4。 我在考虑使用 elasticsearch 功能,但我不确定正确的方法..
我阅读的大多数文章都建议将表记录(使用 logstash 管道或其他方法)复制到弹性索引。

所以我的 API 甚至不查询数据库并直接从 ES 返回文档数组?

这被认为是好的做法吗?将整个表复制到弹性? 表关系怎么样...如果我想按嵌套表关系过滤怎么办?...

【问题讨论】:

  • 没有其他办法了。要使用 elasticsearch 功能,您需要在 elasticsearch 中托管数据。是的,它们是一些限制,例如 Elasticsearch 中没有关系。从你的例子我相信你可以用 SQL 中的模糊匹配做一些事情

标签: mysql elasticsearch replication


【解决方案1】:

所以我的 API 甚至不查询数据库并返回文档数组 直接从ES?

是的,当您对 elasticsearch 进行查询时,您只会从 Elasticsearch 获得结果。另一种方法是,只需从 Elasticsearch 获取 id 并使用 id 从 MySQL 检索文档,但这可能会影响响应时间。

这被认为是好的做法吗?将整个表复制到 松紧带?表关系怎么样......如果我想过滤怎么办 嵌套表关系?...

这与好的做法或坏的做法无关,而是关于您想要实现什么类型的功能和用例,以及基于该技术堆栈可以使用和数据可以复制。有很多公司使用 Elasticsearch 作为 secondary 数据源,他们有重复的数据只是因为用例最适合 Elasticsearch 或其他 NoSQL 数据库。

Elasticsearch 是 NoSQL DB,它不维护数据之间的任何关系。因此,您需要在索引到 Elasticsearch 之前对数据进行非规范化。您可以阅读this 文章了解更多关于非规范化以及为什么需要它的信息。

ElasticSearch 为父子关系提供NestedJoin 数据类型,但两者都有一些限制和性能影响。

以下是他们提到的join字段类型:

连接字段不应像关系数据库中的连接那样使用。在 Elasticsearch 良好性能的关键是对数据进行反规范化 成文件。每个连接字段,has_childhas_parent查询添加一个 对您的查询性能产生重大影响。它还可以触发全局 要构建的序号。

以下是他们提到的nested 字段类型:

当使用大量任意键集摄取键值对时, 您可能会考虑将每个键值对建模为自己的嵌套 带有keyvalue 字段的文档。相反,请考虑使用 flattened 数据类型,它将整个对象映射为单个字段,并且 允许对其内容进行简单搜索。嵌套文档和 查询通常很昂贵,因此使用 flattened 数据类型 这个用例是一个更好的选择。

我读过的大多数文章都建议复制表记录(使用 logstash 管道或其他方法)到弹性索引。

是的,您可以使用 logstash 或任何语言客户端,如 javapython 等,将数据从数据库同步到 Elasticsearch。您可以查看this SO answer 以获取更多信息。

您的搜索要求

如果您继续使用 Elasticsearch,那么您可以使用 N-Gram TokenizerRegex Query 并实现您的搜索要求。

【讨论】:

    【解决方案2】:

    或许你可以试试 TiDB:https://medium.com/@shenli3514/simplify-relational-database-elasticsearch-architecture-with-tidb-c19c330b7f30

    如果您想扩展 MySQL 并进行快速过滤和聚合,TiDB 可以简化架构并减少开发工作。

    【讨论】:

      猜你喜欢
      • 2012-11-23
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-24
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多