faiss-node provides Node.js bindings for faiss
This package is in a very early stage of development.
$ npm install faiss-nodeconst{ IndexFlatL2, Index, IndexFlatIP, MetricType }=require('faiss-node');constdimension=2;constindex=newIndexFlatL2(dimension);console.log(index.getDimension());// 2console.log(index.isTrained());// trueconsole.log(index.ntotal());// 0// inserting data into index.index.add([1,0]);index.add([1,2]);index.add([1,3]);index.add([1,1]);console.log(index.ntotal());// 4constk=4;constresults=index.search([1,0],k);console.log(results.labels);// [ 0, 3, 1, 2 ]console.log(results.distances);// [ 0, 1, 4, 9 ]// Save indexconstfname='faiss.index';index.write(fname);// Load saved indexconstindex_loaded=IndexFlatL2.read(fname);console.log(index_loaded.getDimension());//2console.log(index_loaded.ntotal());//4constresults1=index_loaded.search([1,1],4);console.log(results1.labels);// [ 3, 0, 1, 2 ]console.log(results1.distances);// [ 0, 1, 1, 4 ]// Merge indexconstnewIndex=newIndexFlatL2(dimension);newIndex.mergeFrom(index);console.log(newIndex.ntotal());// 4// Remove itemsconsole.log(newIndex.search([1,2],1));// { distances: [ 0 ], labels: [ 1 ] }constremovedCount=newIndex.removeIds([0]);console.log(removedCount);// 1console.log(newIndex.ntotal());// 3console.log(newIndex.search([1,2],1));// { distances: [ 0 ], labels: [ 0 ] }// IndexFlatIPconstipIndex=newIndexFlatIP(2);ipIndex.add([1,0]);// Serialize an indexconstindex_buf=newIndex.toBuffer();constdeserializedIndex=Index.fromBuffer(index_buf);console.log(deserializedIndex.ntotal());// 3// Factory indexconsthnswIndex=Index.fromFactory(2,'HNSW,Flat',MetricType.METRIC_INNER_PRODUCT);constx=[1,0,0,1];hnswIndex.train(x);hnswIndex.add(x);MIT