当前位置: 首页 > 面试题库 >

MySQL的ElasticSearch用法

颛孙轩昂
2023-03-14
问题内容

我正在使用ElasticSearch作为网站的搜索组件。被索引并最终被搜索的数据与保存在MySQL DB中的数据相同。

我的解决方法是在发生相应的CRUD MySQL操作时在索引中添加/删除/修改数据。

例如,创建操作如下所示:

public function savePost(Request $request) {
    //Firstly, create the object and save it to MySQL
    $post = new Post();
    $post->title = $request->title;
    $post->body = $request->body;
    //...
    //and so on
    $post->save();

    //Secondly, index this new data:
    $elasticSearchClient = ClientBuilder::create()->build();

    $params = [
        'index' => 'some_index_elasticsearch',
        'id' =>  $post->id,
        'type' => 'post',
        'timestamp' => time(),
        'body' => [
            'id' => $post->id,
            'title' => $post->title,
            'body' => $post->body,
            //... and so on
        ],
    ];

    $elasticSearchClient->index($params);

}

如果数据是在MySQL中删除/更新的,那么我将其删除或从索引中更新。

这是将MySQL与ElasticSearch(或其他任何类似的技术,例如Sphinx)结合使用的正确方法吗?还是建议使用更好的方法将MySQL用作ElasticSearch的更多数据源?(这实际上根本没有发生,因为ElasticSearch和MySQL之间根本没有交互)。

我正在使用https://github.com/elastic/elasticsearch-
php
与ElasticSearch进行交互,如果有什么不同的话。

需要澄清的是:这种方法到目前为止仍然有效-我不确定这是否是 正确的 方法,或者不确定是否有人可以看到这种方法可能会遇到的问题。


问题答案:

没有使用Elasticsearch的“正确方法”。“正确”是相对的,因此“正确方法”是支持您的用例的一种方法。Elasticsearch不仅适用于一种特定的用例,而且适用于越来越多的一种用例。

您所描述的情况是一种非常有效的情况,即在ES中为您在另一个RDBMS(如MySQL)中拥有的任何内容编制索引,并确保被索引的内容与主要事实来源同步。

您需要牢记的用例中的一件困难事情是,您必须保证MySQL和ES始终保持1:1同步,由于各种原因,这不一定很容易做到:

  • 如果您需要关闭ES进行维护,但由于任何原因您的应用程序必须保持正常运行,会发生什么情况?
  • 如果ES中存在问题并且文档没有被索引/更新/删除,该怎么办?(请记住没有交易支持)

您需要问自己这些问题,并找出缓解这些潜在问题的策略,因为我可以向您保证它们(和其他问题)肯定会出现。

综上所述,您的体系结构没有问题,成千上万的公司都在做同样的事情,但是,如果您的同步计划向南,则需要制定一个计划。



 类似资料:
  • 一个将 MySQL 的数据同步到 ElasticSearch 的工具。首次初始导入基于mysqldump,增量同步基于MySQL的binlog机制,采用Python语言开发。

  • 问题内容: 我正在尝试将MYSQL查询转换为Elasticsearch。该查询包括在不同字段上的多个条件。让我解释一下我要达到的目标。我的MySQL查询是 如何在Elasticsearch中复制此查询。我的尝试是 但这不会返回任何内容。我正在使用Elasticsearch 7.6并尝试在Kibana上使用curl复制此查询,但答案仍然相同。 期待帮助 根据要求,索引的映射是 我接受的文件是 问题答

  • 问题内容: 我想使用elasticsearch-river-mysql以便将数据从MySQL数据库连续传输到ElasticSearch。我是ES和Rivers的初学者,所以希望您能为我的问题提供帮助。 据我所知,数据将从MySQL数据库流式传输到ES集群,后者将自动对其进行索引。那是对的吗?我需要了解任何超时或限制吗? 关系数据库表之间的外键关系将如何转换为ES?包含外键的表行是否将成为ES文档的

  • 5.8.1.1 Elasticsearch 安装 安装 logstash ElasticSearch中 logstash安装和logstash-input-jdbc插件 安装 logstash-input-jdbc插件 logstash-plugin install logstash-input-jdbc # 在有网点环境下安装,将安装插件后的 logstash 拷贝到内网环境即可使用。 编辑

  • Elasticsearch 作为一个 Java 应用,本身的部署已经非常简单了。不过作为生产环境,还是有必要采用一些更标准化的方式进行集群的管理。Elasticsearch 官方提供并推荐使用 Puppet 方式部署和管理。其 Puppet 模块源码地址见: https://github.com/elastic/puppet-elasticsearch 安装方法 和其他标准 Puppet Modu

  • 问题内容: 在我的一个项目中,我计划将ElasticSearch与mysql一起使用。我已经成功安装了ElasticSearch。我能够单独管理ES中的索引。但我不知道如何用mysql实现相同的功能。 我已经阅读了几份文件,但我有点困惑,不清楚。谁能帮帮我吗? 提前致谢。 问题答案: 终于我找到了答案。分享我的发现。 要将ElasticSearch与Mysql一起使用,您将需要Java数据库连接(