如果是,那么在弹性搜索中将关系数据库表存储为不同的索引是否好,然后如何在索引中传递关系

时间:2018-10-21 10:36:32

标签: python arrays json elasticsearch logstash

例如,在我的例子中,有3个postgres表通过主键链接并共享数据。

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

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

3。份量-包含营养份量的数量。

在进行连接后,我将数据传输到了Elasticsearch。 所以我想将此数据传输到带有NDB_NO作为document_id的elasticsearch中,并且所有数据都将在其下。我需要帮助.. please check image here

1 个答案:

答案 0 :(得分:0)

要视情况而定。

有时,在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(或将它们存储在另一个字段中),以便随后可以返回数据的“源”以获取更多信息。 / p>