Commit Graph

5 Commits (4f574d59b047a133eb4f56e6202b24c2ee26fb31)

Author SHA1 Message Date
Kaelen Haag 1ee15ef3c3 Proposal IDSelectorCombination (#2742)
Summary:
Adds support for an IDSelector that takes in two IDSelectors and can perform a boolean operation on their is_member outcomes.

Current implementation is pretty naive and doesn't try to do any optimizations on the types of IDSelectors combined.

Also test cases are definitely lacking but can add more once approach is agreed upon.

Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2742

Reviewed By: algoriddle

Differential Revision: D43904855

Pulled By: mdouze

fbshipit-source-id: bbe687800a19b418ca30c9257fb0334c64ab5f52
2023-03-08 08:48:54 -08:00
Matthijs Douze 75bd1fcacc Scan exactly max_codes elements (#2647)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2647

The `max_codes` search parameter for IVF indexes limits the number of distance computations that are performed.
Previously, the number of distance computations could exceed max_codes because inverted lists were scanned completely.
This diff changed this to scan the beginning of the last inverted list to reach `max_codes` exactly.

Reviewed By: alexanderguzhva

Differential Revision: D42367593

fbshipit-source-id: 67c88b93a407ab271397e913c5fa17104f4274c3
2023-01-09 00:11:07 -08:00
Matthijs Douze af25054e2d support IDSelector in more classes (#2509)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2509

Adds support for:
- IDSelector for Flat and SQ
- search_type in SearchParametersPQ
- IDSelectors implemented in Python (slow but good for testing)

Start optimization of IDSelectorRange and IDSelectorArray for IndexFlat and IDSelectorRange for IndexIVF

Reviewed By: alexanderguzhva

Differential Revision: D40037795

fbshipit-source-id: 61e01acb43c6aa39fea2c3b67a8bba9072383b74
2022-10-06 23:03:23 -07:00
Matthijs Douze df9c49c335 fix windows compilation and test (#2505)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2505

the SearchParameters made the swig wrapper too long. This diff attempts to work around.

Reviewed By: alexanderguzhva

Differential Revision: D39998713

fbshipit-source-id: 6938b5ca1c64bdc748899407909f7e59f62c0de3
2022-10-03 01:42:16 -07:00
Matthijs Douze dd814b5f14 IVF filtering based on IDSelector (no init split) (#2483)
Summary:
Pull Request resolved: https://github.com/facebookresearch/faiss/pull/2483

This diff changes the following:
1. all search functions now take a `SearchParameters` argument that overrides the internal search parameters
2. the default implementation for most classes throws when the params argument is non-nullptr / non-None
3. the IndexIVF and IndexHNSW classes have functioning SearchPArameters
4. the SearchParameters includes an IDSelector that can search only in a subset of the index based on a defined subset of ids

There is also some refactoring: the IDSelector was moved to its own .h/.cpp and python/__init__.py is spit in parts.

The diff is quite bulky because the search function prototypes need to be changed in all index classes.

Things to fix in subsequent diffs:

- support SearchParameters for more index types (Flat variants)

- better sub-object ownership for SearchParams (with std::unique_ptr?)

- special handling of IDSelectorRange to make it faster

Reviewed By: alexanderguzhva

Differential Revision: D39852589

fbshipit-source-id: 4988bdb5b9bee1207cd327d3f80bf5e0e2467fe1
2022-09-30 06:40:03 -07:00