例如,在我的例子中,有3个postgres表通过主键链接并共享数据。
1)产品表-包含所有产品价值和价格等。
2。)营养-它含有具有重复主键的产品营养。
3。份量-包含营养份量的数量。
在进行连接后,我将数据传输到了Elasticsearch。 所以我想将此数据传输到带有NDB_NO作为document_id的elasticsearch中,并且所有数据都将在其下。我需要帮助.. please check image here
答案 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>