예제
LanceDB — 임베디드 벡터 검색

실제로 실행 가능한 미니 프로젝트입니다. 받아서 Docker로 실행해 보세요.

2026년 6월 28일

LanceDB — 임베디드 벡터 검색

아주 작은 LanceDB 스크립트입니다. 벡터 테이블을 만들고 최근접 이웃을 검색해 가장 가까운 행을 출력합니다. 완전 임베디드라 서버·API 키·네트워크가 필요 없고, 출력이 결정적입니다.

Docker로 실행

cd samples/lancedb_1
docker build -t aas-lancedb .
docker run --rm aas-lancedb

Docker로 실행 (DooD를 쓰는 devcontainer에서)

호스트 Docker 데몬과 통신하는 dev container(Docker-outside-of-Docker)에서는 위의 포그라운드 docker run이 종종 아무것도 출력하지 않고 exit 0으로 끝납니다. 하지만 실행 자체는 성공한 것입니다. detached로 실행하고 로그를 따라가세요:

cd samples/lancedb_1
docker build -t aas-lancedb .
docker logs -f "$(docker run -d aas-lancedb)"

로컬에서 실행

cd samples/lancedb_1
pip install -r requirements.txt
python app.py

실행 결과

LanceDB는 로컬에서 동작하고 이 샘플은 결정적이라, 출력이 매번 동일합니다.

nearest: Cats are independent pets that purr.

파일

app.py
"""LanceDB: an embedded vector database — no server, data on local disk.

Creates a small table of vectors, runs a nearest-neighbour search, and prints
the closest row. Fully local and deterministic: no API key, no network.

Run:
    docker build -t aas-lancedb .
    docker run --rm aas-lancedb
"""

import lancedb


def main() -> None:
    db = lancedb.connect("/tmp/lance-demo")  # embedded; a local directory
    db.drop_table("docs", ignore_missing=True)
    tbl = db.create_table(
        "docs",
        data=[
            {"vector": [0.1, 0.2, 0.3, 0.4], "text": "Cats are independent pets that purr."},
            {"vector": [0.9, 0.8, 0.7, 0.6], "text": "A rocket is propelled by ejecting exhaust."},
        ],
    )

    hits = tbl.search([0.12, 0.21, 0.29, 0.41]).limit(1).to_list()
    print("nearest:", hits[0]["text"])


if __name__ == "__main__":
    main()