Krotos Modules 3
Loading...
Searching...
No Matches
NearestNeighbourSearch.h
Go to the documentation of this file.
1#pragma once
2
3//
4// NearestNeighbourSearch.h
5// vector_search
6//
7// Created by Chris Scott on 06/12/2022.
8//
9
10#include <cassert>
11#include <chrono>
12#include <cstdlib>
13#include <fstream>
14#include <iostream>
15#include <map>
16#include <sstream>
17#include <vector>
18#include "hnswlib/hnswlib.h"
19
20namespace krotos
21{
22 struct Dataset {
23 std::vector<std::string> filenames;
24 std::map<std::string, std::vector<float>> vectors;
25
26 // Read a vector collection in csv format.
27 // Each line contains a filename and a comma-separated list of numbers.
28 static Dataset read_embeddings(const std::string& filename);
29 };
30
32 // Hnswlib - fast approximate nearest neighbor search
33 // https://github.com/nmslib/hnswlib
34
35 public:
36
37 NearestNeighbourSearch( std::string datasetPath );
38
40
41 void getNearestNeighbours(const std::string& query, const int numMatches, std::vector<std::string>& returnResults);
42
43 private:
44
45 std::vector<std::pair<float, hnswlib::labeltype> > knnQuery(std::string query, int k);
46
47 void addDatasetItems();
49 std::unique_ptr<hnswlib::BruteforceSearch<float>> alg;
50 //hnswlib::HierarchicalNSW<float>* alg;
52
53 std::unique_ptr<hnswlib::InnerProductSpace> m_spaceInstance;
54 };
55
56
57}
Definition hnswlib.h:142
Definition NearestNeighbourSearch.h:31
~NearestNeighbourSearch()
Definition NearestNeighbourSearch.cpp:43
hnswlib::SpaceInterface< float > * space
Definition NearestNeighbourSearch.h:51
std::vector< std::pair< float, hnswlib::labeltype > > knnQuery(std::string query, int k)
Definition NearestNeighbourSearch.cpp:45
Dataset dataset
Definition NearestNeighbourSearch.h:48
NearestNeighbourSearch(std::string datasetPath)
Definition NearestNeighbourSearch.cpp:13
void getNearestNeighbours(const std::string &query, const int numMatches, std::vector< std::string > &returnResults)
Definition NearestNeighbourSearch.cpp:101
std::unique_ptr< hnswlib::BruteforceSearch< float > > alg
Definition NearestNeighbourSearch.h:49
std::unique_ptr< hnswlib::InnerProductSpace > m_spaceInstance
Definition NearestNeighbourSearch.h:53
void addDatasetItems()
Definition NearestNeighbourSearch.cpp:52
Definition AirAbsorptionFilter.cpp:2
Definition NearestNeighbourSearch.h:22
std::map< std::string, std::vector< float > > vectors
Definition NearestNeighbourSearch.h:24
std::vector< std::string > filenames
Definition NearestNeighbourSearch.h:23
static Dataset read_embeddings(const std::string &filename)
Definition NearestNeighbourSearch.cpp:64