【问题标题】:Is it good to store relational database table as different index in elastic-search if yes then how to pass relationship in index如果是的话,将关系数据库表存储为弹性搜索中的不同索引是否很好,那么如何在索引中传递关系
【发布时间】:2019-03-25 15:30:22
【问题描述】:

以我为例,有 3 个 postgres 表,它们通过主键链接并共享数据。

1) 产品表 - 它包含所有产品价值和价格等。

2.) 营养素 - 它包含具有重复主键的产品的营养素。

3.)Serving Size - 它包含营养素的份量。

在进行连接后,我将这些数据转移到了 elasticsearch,这使得它变得更加复杂。 所以我想用 NDB_NO 作为 document_id 将这些数据传输到 elasticsearch,在它下面,所有数据都会来。我需要帮助.. please check image here

【问题讨论】:

    标签: python arrays json elasticsearch logstash


    【解决方案1】:

    视情况而定。

    有时,在 Elasticsearch 中镜像您的数据库表是有意义的。例如,如果您希望用户能够自己搜索营养素列表和自己的产品列表,最好有两个 Elasticsearch 索引。

    但是,听起来您想要的,并且在 Elasticsearch 世界中更常见的是,在索引到 Elasticsearch 时将来自不同表的数据组合起来。由于全文搜索的工作方式,您经常希望denormalize 您的数据。非规范化通常是关系数据库领域的反模式,但通常是 Elasticsearch 的最佳实践。

    举个例子,如果您希望用户能够搜索含有各种营养成分的产品,您可能希望像这样索引您的产品文档:

    #change host to reflect your Elasticsearch server
    curl -XPUT 'http://localhost:9200/products/_doc/1' -d '{
      "name": "Banana",
      "nutrients": ["potassium", "vitamin C", "copper"]
    }'
    
    curl -XPUT 'http://localhost:9200/products/_doc/2' -d '{
      "name": "Rice",
      "nutrients": ["manganese", "copper"]
    }'
    
    curl -XPUT 'http://localhost:9200/products/_doc/3' -d '{
      "name": "Orange",
      "nutrients": ["Vitamin C", "Thiamin"]
    }'
    

    请原谅我在营养信息方面的拙劣尝试

    如您所见,营养成分的名称经常重复。但是,这种方法可以让您使用 Elasticsearch 的全文搜索功能来查找具有所需营养的任何项目。

    您可能希望在 Elasticsearch 中为您的产品重复使用关系数据库中的 ID(或将它们存储在另一个字段中),以便您可以返回数据的“源”以获取更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      相关资源
      最近更新 更多