<mxfile host="archify-aws" agent="archify-aws" version="1">
  <diagram name="Enterprise product catalog search on AWS" id="-brX-u95Os6QKn0DzraB">
    <mxGraphModel dx="1323" dy="1334" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1323" pageHeight="1334" math="0" shadow="0">
      <root>
        <mxCell id="0"/>
        <mxCell id="1" parent="0"/>
<mxCell id="title" value="Enterprise product catalog search on AWS" style="text;html=1;align=left;verticalAlign=top;fontSize=20;fontStyle=1;fontColor=#000000;whiteSpace=wrap;" vertex="1" parent="1"><mxGeometry x="40" y="24" width="1243" height="30" as="geometry"/></mxCell>
<mxCell id="subtitle" value="Hybrid keyword + semantic search over a product catalog: a cached edge, a thin search API, OpenSearch for retrieval, Bedrock embeddings for meaning, and an event-driven pipeline that keeps the index fresh" style="text;html=1;align=left;verticalAlign=top;fontSize=12;fontColor=#545B64;whiteSpace=wrap;" vertex="1" parent="1"><mxGeometry x="40" y="56" width="1243" height="24" as="geometry"/></mxCell>
<mxCell id="g-cloud" value="AWS Cloud" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_aws_cloud_alt;strokeColor=#232F3E;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#232F3E;dashed=0;" vertex="1" parent="1"><mxGeometry x="221" y="116" width="1062" height="1178" as="geometry"/></mxCell>
<mxCell id="g-region" value="Region" style="points=[[0,0],[0.25,0],[0.5,0],[0.75,0],[1,0],[1,0.25],[1,0.5],[1,0.75],[1,1],[0.75,1],[0.5,1],[0.25,1],[0,1],[0,0.75],[0,0.5],[0,0.25]];outlineConnect=0;gradientColor=none;html=1;whiteSpace=wrap;fontSize=12;fontStyle=0;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;shape=mxgraph.aws4.group;grIcon=mxgraph.aws4.group_region;strokeColor=#00A4A6;fillColor=none;verticalAlign=top;align=left;spacingLeft=30;fontColor=#147EBA;dashed=1;" vertex="1" parent="g-cloud"><mxGeometry x="24" y="210" width="1014" height="944" as="geometry"/></mxCell>
<mxCell id="g-retrieval" value="Retrieval and ranking" style="fillColor=none;verticalAlign=top;fontStyle=0;whiteSpace=wrap;html=1;container=1;pointerEvents=0;collapsible=0;recursiveResize=0;strokeColor=#8C4FFF;fontColor=#8C4FFF;align=left;spacingLeft=40;" vertex="1" parent="1"><mxGeometry x="779" y="374" width="201" height="520" as="geometry"/></mxCell>
<mxCell id="gi-retrieval" value="" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;html=1;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elasticsearch_service;" vertex="1" parent="g-retrieval"><mxGeometry x="0" y="0" width="32" height="32" as="geometry"/></mxCell>
<mxCell id="n-shoppers" value="Shoppers&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;web and app&lt;/font&gt;" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1"><mxGeometry x="58.5" y="331" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-merch" value="Merchandisers&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;synonyms, boosts&lt;/font&gt;" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.users;" vertex="1" parent="1"><mxGeometry x="58.5" y="513" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-pim" value="PIM / ERP&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;product master&lt;/font&gt;" style="sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=none;fillColor=#232F3D;strokeColor=none;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;pointerEvents=1;shape=mxgraph.aws4.traditional_server;" vertex="1" parent="1"><mxGeometry x="58.5" y="695" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-waf" value="AWS WAF&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;bot and rate rules&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#DD344C;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.waf;" vertex="1" parent="1"><mxGeometry x="610" y="164" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-cf" value="Amazon CloudFront&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;cache popular queries&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudfront;" vertex="1" parent="1"><mxGeometry x="821.5" y="164" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-apigw" value="Amazon API Gateway&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;search API&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway;" vertex="1" parent="1"><mxGeometry x="574.5" y="506" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-searchfn" value="AWS Lambda&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;query understanding + blend&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#ED7100;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;" vertex="1" parent="1"><mxGeometry x="574.5" y="674" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-os" value="Amazon OpenSearch&lt;br&gt;Service&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;BM25 + vector (hybrid)&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elasticsearch_service;" vertex="1" parent="g-retrieval"><mxGeometry x="68.5" y="48" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-embed" value="Amazon Bedrock&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;text embeddings&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#01A88D;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.bedrock;" vertex="1" parent="g-retrieval"><mxGeometry x="68.5" y="216" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-rank" value="Amazon Personalize&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;personalised re-rank&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#01A88D;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.personalize;" vertex="1" parent="g-retrieval"><mxGeometry x="68.5" y="384" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-feed" value="Amazon S3&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;catalog feeds + images&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#7AA116;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;" vertex="1" parent="1"><mxGeometry x="305" y="958" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-reindex" value="AWS Step Functions&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;full re-index + alias swap&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.step_functions;" vertex="1" parent="1"><mxGeometry x="522.5" y="958" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-rules" value="Amazon DynamoDB&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;catalog + curation rules&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#C925D1;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb;" vertex="1" parent="1"><mxGeometry x="746" y="958" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-q" value="Amazon SQS&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;update buffer + DLQ&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;" vertex="1" parent="1"><mxGeometry x="949.5" y="958" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-indexer" value="AWS Lambda&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;enrich, embed, index&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#ED7100;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda;" vertex="1" parent="1"><mxGeometry x="1141" y="958" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-fh" value="Amazon Data&lt;br&gt;Firehose&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;search + click events&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.kinesis_data_firehose;" vertex="1" parent="1"><mxGeometry x="372" y="1134" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-lake" value="Amazon S3&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;analytics lake&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#7AA116;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;" vertex="1" parent="1"><mxGeometry x="541" y="1134" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-athena" value="Amazon Athena&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;relevance analysis&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.athena;" vertex="1" parent="1"><mxGeometry x="701.5" y="1134" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-cw" value="Amazon CloudWatch&lt;br&gt;&lt;font style=&quot;font-size:10px&quot; color=&quot;#545B64&quot;&gt;latency, zero-result rate&lt;/font&gt;" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#E7157B;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudwatch_2;" vertex="1" parent="1"><mxGeometry x="904.5" y="1134" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="n-kms" value="AWS KMS" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#DD344C;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.key_management_service;" vertex="1" parent="1"><mxGeometry x="1085" y="1134" width="64" height="64" as="geometry"/></mxCell>
<mxCell id="e-0" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=0.5;exitY=1;exitDx=0;exitDy=48;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-apigw" target="n-searchfn"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<object label="3" tooltip="3. Amazon API Gateway → AWS Lambda" id="b-0"><mxCell style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;strokeColor=#ffffff;fontColor=#ffffff;fontStyle=1;fontSize=12;" vertex="1" parent="1"><mxGeometry x="595.5" y="631" width="22" height="22" as="geometry"/></mxCell></object>
<mxCell id="e-1" value="protects" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-waf" target="n-cf"><mxGeometry x="0" relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e-2" value="change stream" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-rules" target="n-q"><mxGeometry x="0" relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e-3" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-q" target="n-indexer"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e-4" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-feed" target="n-reindex"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e-5" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-fh" target="n-lake"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e-6" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-lake" target="n-athena"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
<mxCell id="e-7" value="search" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-shoppers" target="n-cf"><mxGeometry x="-0.1" relative="1" as="geometry"><Array as="points"><mxPoint x="144.5" y="363"/><mxPoint x="144.5" y="308"/><mxPoint x="799.5" y="308"/><mxPoint x="799.5" y="196"/></Array></mxGeometry></mxCell>
<object label="1" tooltip="1. Shoppers → Amazon CloudFront (search)" id="b-7"><mxCell style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;strokeColor=#ffffff;fontColor=#ffffff;fontStyle=1;fontSize=12;" vertex="1" parent="1"><mxGeometry x="133.5" y="352" width="22" height="22" as="geometry"/></mxCell></object>
<mxCell id="e-8" value="cache miss" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=0.5;exitY=1;exitDx=0;exitDy=48;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-cf" target="n-apigw"><mxGeometry x="-0.1" relative="1" as="geometry"><Array as="points"><mxPoint x="853.5" y="367"/><mxPoint x="606.5" y="367"/></Array></mxGeometry></mxCell>
<object label="2" tooltip="2. Amazon CloudFront → Amazon API Gateway (cache miss)" id="b-8"><mxCell style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;strokeColor=#ffffff;fontColor=#ffffff;fontStyle=1;fontSize=12;" vertex="1" parent="1"><mxGeometry x="842.5" y="289" width="22" height="22" as="geometry"/></mxCell></object>
<mxCell id="e-9" value="embed query" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-searchfn" target="n-embed"><mxGeometry x="0.4" relative="1" as="geometry"><Array as="points"><mxPoint x="743" y="706"/><mxPoint x="743" y="622"/></Array></mxGeometry></mxCell>
<object label="4" tooltip="4. AWS Lambda → Amazon Bedrock (embed query)" id="b-9"><mxCell style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;strokeColor=#ffffff;fontColor=#ffffff;fontStyle=1;fontSize=12;" vertex="1" parent="1"><mxGeometry x="812.5" y="611" width="22" height="22" as="geometry"/></mxCell></object>
<mxCell id="e-10" value="hybrid query" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-searchfn" target="n-os"><mxGeometry x="-0.2" relative="1" as="geometry"><Array as="points"><mxPoint x="695" y="706"/><mxPoint x="695" y="454"/></Array></mxGeometry></mxCell>
<object label="5" tooltip="5. AWS Lambda → Amazon OpenSearch Service (hybrid query)" id="b-10"><mxCell style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;strokeColor=#ffffff;fontColor=#ffffff;fontStyle=1;fontSize=12;" vertex="1" parent="1"><mxGeometry x="792.5" y="443" width="22" height="22" as="geometry"/></mxCell></object>
<mxCell id="e-11" value="re-rank" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=0.5;exitY=1;exitDx=0;exitDy=48;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-searchfn" target="n-rank"><mxGeometry x="0" relative="1" as="geometry"><Array as="points"><mxPoint x="606.5" y="790"/></Array></mxGeometry></mxCell>
<object label="6" tooltip="6. AWS Lambda → Amazon Personalize (re-rank)" id="b-11"><mxCell style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#000000;strokeColor=#ffffff;fontColor=#ffffff;fontStyle=1;fontSize=12;" vertex="1" parent="1"><mxGeometry x="595.5" y="779" width="22" height="22" as="geometry"/></mxCell></object>
<mxCell id="e-12" value="curation rules" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-merch" target="n-rules"><mxGeometry x="0.1" relative="1" as="geometry"><Array as="points"><mxPoint x="144.5" y="545"/><mxPoint x="144.5" y="912"/><mxPoint x="724" y="912"/><mxPoint x="724" y="990"/></Array></mxGeometry></mxCell>
<mxCell id="e-13" value="bulk feed" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=0.5;exitY=1;exitDx=0;exitDy=48;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-pim" target="n-feed"><mxGeometry x="0.5" relative="1" as="geometry"><Array as="points"><mxPoint x="90.5" y="990"/></Array></mxGeometry></mxCell>
<mxCell id="e-14" value="updates" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=0.5;exitY=1;exitDx=0;exitDy=48;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-pim" target="n-rules"><mxGeometry x="-0.1" relative="1" as="geometry"><Array as="points"><mxPoint x="90.5" y="829"/><mxPoint x="761" y="829"/><mxPoint x="761" y="936"/><mxPoint x="778" y="936"/></Array></mxGeometry></mxCell>
<mxCell id="e-15" value="embed product" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-indexer" target="n-embed"><mxGeometry x="0.6" relative="1" as="geometry"><Array as="points"><mxPoint x="1173" y="622"/></Array></mxGeometry></mxCell>
<mxCell id="e-16" value="upsert" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=1;entryDx=0;entryDy=48;entryPerimeter=0;" edge="1" parent="1" source="n-indexer" target="n-os"><mxGeometry x="-0.4" relative="1" as="geometry"><Array as="points"><mxPoint x="1173" y="936"/><mxPoint x="1233" y="936"/><mxPoint x="1233" y="556"/><mxPoint x="879.5" y="556"/></Array></mxGeometry></mxCell>
<mxCell id="e-17" value="rebuild index" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-reindex" target="n-os"><mxGeometry x="-0.7" relative="1" as="geometry"><Array as="points"><mxPoint x="500.5" y="990"/><mxPoint x="500.5" y="394"/><mxPoint x="825.5" y="394"/><mxPoint x="825.5" y="454"/></Array></mxGeometry></mxCell>
<mxCell id="e-18" value="events" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#232F3E;strokeWidth=2;labelBackgroundColor=#ffffff;fontSize=11;fontColor=#232F3E;endArrow=open;endFill=0;endSize=8;dashed=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="n-apigw" target="n-fh"><mxGeometry x="0.1" relative="1" as="geometry"><Array as="points"><mxPoint x="457.3" y="538"/><mxPoint x="457.3" y="1166"/></Array></mxGeometry></mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
