【问题标题】:how to create an elastic search index which emulates my mysql db如何创建一个模拟我的 mysql 数据库的弹性搜索索引
【发布时间】:2019-10-29 21:28:30
【问题描述】:

我是 elasticsearch 的新手,我很难从 mysql 切换到 elasticsearch

我的Mysql我的表是这样的

表: test_request +---------+-------------+--------------+---------- -+------------+------------+ | test_id |设备名称 | ip_address |用户名 |时间戳 |显示标志 | +---------+-------------+--------------+---------- -+------------+------------+ | 1 | d1 | 0.0.0.0 |管理员 | |是 | +---------+-------------+--------------+---------- -+------------+------------+
表: test_results +----+---------+-----+------------+---- ---------------------+---------------------------- ------+------------+ |编号 | test_id |命令行 | xml | json |另一个json |显示标志 | +----+---------+-----+------------+---- ---------------------+---------------------------- ------+------------+ | 1 | 1 | c1 |一些xml格式的数据| {“一些”:“这里的json”} | {“一些”:“这里有另一个 json”} |是 | +----+---------+-----+------------+---- ---------------------+---------------------------- ------+------------+ | 2 | 1 | c2 |一些xml格式的数据| {“一些”:“这里的json”} | {“一些”:“这里有另一个 json”} |是 | +----+---------+-----+------------+---- ---------------------+---------------------------- ------+------------+ | 3 | 1 | c2 |一些xml格式的数据| {“一些”:“这里的json”} | {“一些”:“这里有另一个 json”} |是 | +----+---------+-----+------------+---- ---------------------+---------------------------- ------+------------+

test_request 表中的test_id 字段和test_results 表中的id 字段为auto increment
jsonanother json 字段的数据类型为JSON .

我正在尝试使用elasticsearch_dsl 创建索引及其映射。我正在通过docs 弄清楚如何做到这一点,但我无法弄清楚三件事

  1. 如何将 test_id 获取到auto increment
  2. 如何制作JSON数据类型的字段
  3. 在两者之间建立关系的最佳方式(我部分理解嵌套在这里可能会有所帮助)但寻找正确的方式来做到这一点

【问题讨论】:

    标签: mysql json python-3.x elasticsearch elasticsearch-dsl-py


    【解决方案1】:

    auto increment id 列在 SQL 表中执行以下规则:

    1. 它们是行的唯一标识符
    2. 它们允许在表之间链接行

    要在 elasticsearch 中实现这一点,您不需要 auto increment 字段。您可以将文档添加到elasticsearch索引中,elasticsearch会为其添加一个唯一的id。

    对于 JSON 字段,只需使用 object datatype

    有几个选项来设置像 SQL 连接这样的关系:

    1. 您可以将test_results 作为nested 对象放在test_request 文档中
    2. 您可以使用join datatype 字段将test_results 文档链接到同一索引内的test_request 文档
    3. 您可以将每个test_result 与其test_request 一起反规范化并存储到单个文档中。没关系,test_request 将被存储多次。无论如何,Elasticsearch 主要用于搜索。

    您选择哪个版本取决于您。这取决于,您将如何使用您的数据,您将执行什么样的查询。能不能把所有的test_resultstest_request一起收集起来单独调用保存,还是需要先保存test_request再依次添加test_results

    成功更新嵌套字段意味着每次都要重新索引整个文档。 Join datatype 查询成本很高。

    非规范化增加了空间使用,但如果每个请求的test_results数量不多,那么它可能是最好的选择。

    【讨论】:

    • 我可以一次性获取所有的 test_results 并将它们添加到 test_request 中。
    猜你喜欢
    • 1970-01-01
    • 2019-01-08
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2019-09-28
    • 2022-08-17
    相关资源
    最近更新 更多