首页  >  文章  >  后端开发  >  如何设计N:M关系的Elasticsearch索引结构?

如何设计N:M关系的Elasticsearch索引结构?

Linda Hamilton
Linda Hamilton原创
2024-10-31 15:14:01313浏览

How to Design Elasticsearch Index Structure for N:M Relationships?

为多个实体绑定设置 Elasticsearch 索引结构

简介

集成 Elasticsearch (ES )到现有的应用程序中可能是一项艰巨的任务。此对话解决了在处理遗留数据库中的多个实体绑定时设置 ES 索引结构的挑战。

数据库结构

提供的数据库结构呈现三个表: Products、Flags 和 flagsProducts,表示产品和标志之间的 N:M 关系。目标是在 ES 中复制此结构,同时优化高效查询。

推荐方法:扁平化

建议扁平化,而不是维持 N:M 关系结构并创建嵌入标志信息的产品文档。这种方法简化了查询并改进了数据访问。

产品文档结构

扁平化的产品文档将包含以下字段:

  • id :产品 ID(字符串,not_analyzed)
  • title:产品标题(字符串)
  • price:产品价格(double,null_value:0.0)
  • flags:标志标题数组(string, not_analyzed)

示例产品文档:

{
   "id": "00c8234d71c4e94f725cd432ebc04",
   "title": "Alpha",
   "price": 589.0,
   "flags": ["Sellout", "Top Product"]
}
{
   "id": "018357657529fef056cf396626812",
   "title": "Beta",
   "price": 355.0,
   "flags": ["Discount"]
}

产品映射类型

对应的ES 中的映射类型为:

PUT products
{
    "mappings": {
        "product": {
            "properties": {
                "id": {
                    "type": "string",
                    "index": "not_analyzed"
                },
                "title": {
                    "type": "string"
                },
                "price": {
                    "type": "double",
                    "null_value": 0.0
                },
                "flags": {
                    "type": "string",
                    "index": "not_analyzed"
                }
            }
        }
    }
}

从数据库获取数据

要从数据库检索必要的数据以摄取到 ES 中,请使用以下 SQL 查询:

以上是如何设计N:M关系的Elasticsearch索引结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn