Faiss
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends
Public Member Functions | Public Attributes | List of all members
faiss::IndexBinaryIVF Struct Reference

#include <IndexBinaryIVF.h>

Inheritance diagram for faiss::IndexBinaryIVF:
faiss::IndexBinary

Public Member Functions

 IndexBinaryIVF (IndexBinary *quantizer, size_t d, size_t nlist)
 
void reset () override
 Removes all elements from the database.
 
void train (idx_t n, const uint8_t *x) override
 Trains the quantizer.
 
void add (idx_t n, const uint8_t *x) override
 
void add_with_ids (idx_t n, const uint8_t *x, const long *xids) override
 
void add_core (idx_t n, const uint8_t *x, const long *xids, const long *precomputed_idx)
 same as add_with_ids, with precomputed coarse quantizer
 
void search_preassigned (idx_t n, const uint8_t *x, idx_t k, const idx_t *assign, const int32_t *centroid_dis, int32_t *distances, idx_t *labels, bool store_pairs, const IVFSearchParameters *params=nullptr) const
 
virtual BinaryInvertedListScannerget_InvertedListScanner (bool store_pairs=false) const
 
virtual void search (idx_t n, const uint8_t *x, idx_t k, int32_t *distances, idx_t *labels) const override
 
void reconstruct (idx_t key, uint8_t *recons) const override
 
void reconstruct_n (idx_t i0, idx_t ni, uint8_t *recons) const override
 
void search_and_reconstruct (idx_t n, const uint8_t *x, idx_t k, int32_t *distances, idx_t *labels, uint8_t *recons) const override
 
virtual void reconstruct_from_offset (long list_no, long offset, uint8_t *recons) const
 
long remove_ids (const IDSelector &sel) override
 Dataset manipulation functions.
 
virtual void merge_from (IndexBinaryIVF &other, idx_t add_id)
 
size_t get_list_size (size_t list_no) const
 
void make_direct_map (bool new_maintain_direct_map=true)
 
void replace_invlists (InvertedLists *il, bool own=false)
 
- Public Member Functions inherited from faiss::IndexBinary
 IndexBinary (idx_t d=0, MetricType metric=METRIC_L2)
 
virtual void range_search (idx_t n, const uint8_t *x, int radius, RangeSearchResult *result) const
 
void assign (idx_t n, const uint8_t *x, idx_t *labels, idx_t k=1)
 
void display () const
 

Public Attributes

InvertedListsinvlists
 Acess to the actual data.
 
bool own_invlists
 
size_t nprobe
 number of probes at query time
 
size_t max_codes
 max nb of codes to visit to do a query
 
bool use_heap = true
 
bool maintain_direct_map
 map for direct access to the elements. Enables reconstruct().
 
std::vector< long > direct_map
 
IndexBinaryquantizer
 quantizer that maps vectors to inverted lists
 
size_t nlist
 number of possible key values
 
bool own_fields
 whether object owns the quantizer
 
ClusteringParameters cp
 to override default clustering params
 
Indexclustering_index
 to override index used during clustering
 
- Public Attributes inherited from faiss::IndexBinary
int d
 vector dimension
 
int code_size
 number of bytes per vector ( = d / 8 )
 
idx_t ntotal
 total nb of indexed vectors
 
bool verbose
 verbosity level
 
bool is_trained
 set if the Index does not require training, or if training is done already
 
MetricType metric_type
 type of metric this index uses for search
 

Additional Inherited Members

- Public Types inherited from faiss::IndexBinary
using idx_t = Index::idx_t
 all indices are this type
 
using component_t = uint8_t
 
using distance_t = int32_t
 

Detailed Description

Index based on a inverted file (IVF)

In the inverted file, the quantizer (an IndexBinary instance) provides a quantization index for each vector to be added. The quantization index maps to a list (aka inverted list or posting list), where the id of the vector is stored.

Otherwise the object is similar to the IndexIVF

Definition at line 35 of file IndexBinaryIVF.h.

Constructor & Destructor Documentation

faiss::IndexBinaryIVF::IndexBinaryIVF ( IndexBinary quantizer,
size_t  d,
size_t  nlist 
)

The Inverted file takes a quantizer (an IndexBinary) on input, which implements the function mapping a vector to a list identifier. The pointer is borrowed: the quantizer should not be deleted while the IndexBinaryIVF is in use.

Definition at line 26 of file IndexBinaryIVF.cpp.

Member Function Documentation

void faiss::IndexBinaryIVF::add ( idx_t  n,
const uint8_t *  x 
)
overridevirtual

Add n vectors of dimension d to the index.

Vectors are implicitly assigned labels ntotal .. ntotal + n - 1

Parameters
xinput matrix, size n * d / 8

Implements faiss::IndexBinary.

Definition at line 56 of file IndexBinaryIVF.cpp.

void faiss::IndexBinaryIVF::add_with_ids ( idx_t  n,
const uint8_t *  x,
const long *  xids 
)
overridevirtual

Same as add, but stores xids instead of sequential ids.

The default implementation fails with an assertion, as it is not supported by all indexes.

Parameters
xidsif non-null, ids to store for the vectors (size n)

Reimplemented from faiss::IndexBinary.

Definition at line 60 of file IndexBinaryIVF.cpp.

void faiss::IndexBinaryIVF::make_direct_map ( bool  new_maintain_direct_map = true)

intialize a direct map

Parameters
new_maintain_direct_mapif true, create a direct map, else clear it

Definition at line 104 of file IndexBinaryIVF.cpp.

void faiss::IndexBinaryIVF::merge_from ( IndexBinaryIVF other,
idx_t  add_id 
)
virtual

moves the entries from another dataset to self. On output, other is empty. add_id is added to all moved ids (for sequential ids, this would be this->ntotal

Definition at line 292 of file IndexBinaryIVF.cpp.

void faiss::IndexBinaryIVF::reconstruct ( idx_t  key,
uint8_t *  recons 
) const
overridevirtual

Reconstruct a stored vector.

This function may not be defined for some indexes.

Parameters
keyid of the vector to reconstruct
reconsreconstucted vector (size d / 8)

Reimplemented from faiss::IndexBinary.

Definition at line 144 of file IndexBinaryIVF.cpp.

void faiss::IndexBinaryIVF::reconstruct_from_offset ( long  list_no,
long  offset,
uint8_t *  recons 
) const
virtual

Reconstruct a vector given the location in terms of (inv list index + inv list offset) instead of the id.

Useful for reconstructing when the direct_map is not maintained and the inv list offset is computed by search_preassigned() with store_pairs set.

Definition at line 206 of file IndexBinaryIVF.cpp.

void faiss::IndexBinaryIVF::reconstruct_n ( idx_t  i0,
idx_t  ni,
uint8_t *  recons 
) const
overridevirtual

Reconstruct a subset of the indexed vectors.

Overrides default implementation to bypass reconstruct() which requires direct_map to be maintained.

Parameters
i0first vector to reconstruct
ninb of vectors to reconstruct
reconsoutput array of reconstructed vectors, size ni * d / 8

Reimplemented from faiss::IndexBinary.

Definition at line 152 of file IndexBinaryIVF.cpp.

void faiss::IndexBinaryIVF::search ( idx_t  n,
const uint8_t *  x,
idx_t  k,
int32_t *  distances,
idx_t labels 
) const
overridevirtual

assign the vectors, then call search_preassign

Implements faiss::IndexBinary.

Definition at line 127 of file IndexBinaryIVF.cpp.

void faiss::IndexBinaryIVF::search_and_reconstruct ( idx_t  n,
const uint8_t *  x,
idx_t  k,
int32_t *  distances,
idx_t labels,
uint8_t *  recons 
) const
overridevirtual

Similar to search, but also reconstructs the stored vectors (or an approximation in the case of lossy coding) for the search results.

Overrides default implementation to avoid having to maintain direct_map and instead fetch the code offsets through the store_pairs flag in search_preassigned().

Parameters
reconsreconstructed vectors size (n, k, d / 8)

Reimplemented from faiss::IndexBinary.

Definition at line 171 of file IndexBinaryIVF.cpp.

void faiss::IndexBinaryIVF::search_preassigned ( idx_t  n,
const uint8_t *  x,
idx_t  k,
const idx_t assign,
const int32_t *  centroid_dis,
int32_t *  distances,
idx_t labels,
bool  store_pairs,
const IVFSearchParameters params = nullptr 
) const

Search a set of vectors, that are pre-quantized by the IVF quantizer. Fill in the corresponding heaps with the query results. search() calls this.

Parameters
nnb of vectors to query
xquery vectors, size nx * d
assigncoarse quantization indices, size nx * nprobe
centroid_disdistances to coarse centroids, size nx * nprobe
distanceoutput distances, size n * k
labelsoutput labels, size n * k
store_pairsstore inv list index + inv list offset instead in upper/lower 32 bit of result, instead of ids (used for reranking).
paramsused to override the object's search parameters

Definition at line 637 of file IndexBinaryIVF.cpp.

Member Data Documentation

bool faiss::IndexBinaryIVF::use_heap = true

Select between using a heap or counting to select the k smallest values when scanning inverted lists.

Definition at line 46 of file IndexBinaryIVF.h.


The documentation for this struct was generated from the following files: