Skip to content

Adding Hybrid Search to Your Application (In Diagrams)

What Product Team Wants

graph LR
    user[User] -->|Search| app["<span style='color:black'>Application</span>"]
    app -->|Results| user

    app <--> ai["<span style='color:black'>AI/ML</span>"]@{shape: cloud}

    classDef code fill:#ccf
    class app code

    classDef gold fill:#ffd
    class ai gold

How Dev Team Wishes It Worked

graph LR
    user[User] -->|Search| app["<span style='color:black'>Application</span>"]

    app -->|Query| se["<span style='color:black'>Search Engine + Vectors</span>"]
    app -->|add/update/delete| se
    app -->|add/update/delete| db[("Database")]
    se -->|Results| app
    app -->|Results| user

    classDef code fill:#ccf
    class app code

    classDef search fill:#dfd,font-weight:bold
    class se search

What Dev Team Has to Build

graph LR
    user[User] -->|Search| app["<span style='color:black'>Application</span>"]

    app -->|add/update/delete| db[(Database)]

    app --> queue[Queue Service]@{shape: stadium}

    queue --> A

    db --> A

    D -->|Update Index| se

    app <-->|Embed Query| D

    app -->|Query| se["<span style='color:black'>Search Engine + Vectors</span>"]
    se -->|Results| app

    app -->|Results| user

    subgraph pipe["<span style='color:black;font-weight:bold'>Ingestion & Embedding Pipeline</span>"]
        A["<span style='color:black'>Distributed Locking</span>"]@{ shape: bang}
        B["<span style='color:black'>Retries</span>"]@{ shape: bang}
        C["<span style='color:black'>Deduplication</span>"]@{ shape: bang}
        D["<span style='color:black'>Model Embedding</span>"]@{ shape: bang}
        E["<span style='color:black'>API Calls</span>"]@{ shape: bang}
        F["<span style='color:black'>Model Management</span>"]@{ shape: bang}
        G["<span style='color:black'>Batching</span>"]@{ shape: bang}
        H["<span style='color:black'>Worker Scaling</span>"]@{ shape: bang}

        A --> C
        C --> G
        %% B <--> D
        D --> E
        %% D <--> B
        %% E <--> B
        D --> F
        G --> D
        %% F <--> B
        A ~~~ H
        H ~~~ B
        B ~~~ G
    end

    classDef code fill:#ccf
    class app code

    classDef work fill:#fdd
    class A,B,C,D,E,F,G,H work

    style pipe fill:transparent,stroke-dasharray:5 5

    classDef search fill:#dfd,font-weight:bold
    class se search

What Dev Team Could Do with Amgix

graph LR
    user[User] -->|Search| app["<span style='color:black'>Application</span>"]

    app -->|add/update/delete| amgix
    app -->|add/update/delete| db[("Database")]

    amgix["<span style='color:black'>Amgix</span>"]@{ shape: rect}
    queue[RabbitMQ]@{shape: stadium}


    app -->|Query| amgix
    amgix -->|Results| app

    amgix <--> queue
    amgix <--> db

    app -->|Results| user

    classDef code fill:#ccf
    classDef ai fill:#fdf,font-weight:bold
    class app code
    class amgix ai