package faiss /* #include #include #include #include #include */ import "C" import ( "fmt" ) func (idx *IndexImpl) SetDirectMap(mapType int) (err error) { ivfPtr := C.faiss_IndexIVF_cast(idx.cPtr()) if ivfPtr == nil { return fmt.Errorf("index is not of ivf type") } if c := C.faiss_IndexIVF_set_direct_map( ivfPtr, C.int(mapType), ); c != 0 { err = getLastError() } return err } func (idx *IndexImpl) GetSubIndex() (*IndexImpl, error) { ptr := C.faiss_IndexIDMap2_cast(idx.cPtr()) if ptr == nil { return nil, fmt.Errorf("index is not a id map") } subIdx := C.faiss_IndexIDMap2_sub_index(ptr) if subIdx == nil { return nil, fmt.Errorf("couldn't retrieve the sub index") } return &IndexImpl{&faissIndex{subIdx}}, nil } // pass nprobe to be set as index time option for IVF indexes only. // varying nprobe impacts recall but with an increase in latency. func (idx *IndexImpl) SetNProbe(nprobe int32) { ivfPtr := C.faiss_IndexIVF_cast(idx.cPtr()) if ivfPtr == nil { return } C.faiss_IndexIVF_set_nprobe(ivfPtr, C.size_t(nprobe)) } func (idx *IndexImpl) GetNProbe() int32 { ivfPtr := C.faiss_IndexIVF_cast(idx.cPtr()) if ivfPtr == nil { return 0 } return int32(C.faiss_IndexIVF_nprobe(ivfPtr)) }