marcboeker / go-duckdb

go-duckdb provides a database/sql driver for the DuckDB database engine.
MIT License
583 stars 96 forks source link

how to use duckdb_vss? #245

Closed loomrain closed 1 week ago

loomrain commented 2 weeks ago

I want to create an hnsw index and use it for vector queries, Are there any examples?

loomrain commented 2 weeks ago

DB opened with access mode read_write panic: Binder Error: Unknown index type: HNSW

goroutine 1 [running]: main.check(...) /mnt/new_commu_frame/go-duckdb/examples/simple.go:74 main.main() /mnt/new_commu_frame/go-duckdb/examples/simple.go:42 +0x98d

marcboeker commented 1 week ago

You need to install and load the vss extension first:

connector, err := NewConnector("", func(execer driver.ExecerContext) error {
  bootQueries := []string{
      "INSTALL 'vss'",
      "LOAD 'vss'",
  }

  for _, qry := range bootQueries {
      _, err := execer.ExecContext(context.Background(), qry, nil)
      if err != nil {
          return err
      }
  }
  return nil
})

db := sql.OpenDB(connector)
conn, err := db.Conn(context.Background())
res, err := conn.ExecContext(context.Background(), "CREATE TABLE my_vector_table (vec FLOAT[3]); CREATE INDEX my_hnsw_index ON my_vector_table USING HNSW (vec);")