@@ -670,12 +670,92 @@ int64_t hnsw_iter_filter_example()
670670 return 0 ;
671671}
672672
673+ int64_t hnswbq_example () {
674+ std::cout<<" test hns_bq_example: " <<std::endl;
675+ bool is_init = obvectorlib::is_init ();
676+ obvectorlib::VectorIndexPtr index_handler = NULL ;
677+ int dim = 128 ;
678+ int max_degree = 16 ;
679+ int ef_search = 200 ;
680+ int ef_construction = 100 ;
681+ DefaultAllocator default_allocator;
682+ const char * const METRIC_L2 = " l2" ;
683+
684+ const char * const DATATYPE_FLOAT32 = " float32" ;
685+ void * test_ptr = default_allocator.Allocate (10 );
686+ int ret_create_index = obvectorlib::create_index (index_handler,
687+ obvectorlib::HNSW_BQ_TYPE,
688+ DATATYPE_FLOAT32,
689+ METRIC_L2,
690+ dim,
691+ max_degree,
692+ ef_construction,
693+ ef_search,
694+ &default_allocator);
695+
696+ if (ret_create_index!=0 ) return 333 ;
697+ int num_vectors = 10000 ;
698+ auto ids = new int64_t [num_vectors];
699+ auto vectors = new float [dim * num_vectors];
700+ std::mt19937 rng;
701+ rng.seed (47 );
702+ std::uniform_real_distribution<> distrib_real;
703+ for (int64_t i = 0 ; i < num_vectors; ++i) {
704+ ids[i] = i + num_vectors*10 ;
705+ }
706+ for (int64_t i = 0 ; i < dim * num_vectors; ++i) {
707+ vectors[i] = distrib_real (rng);
708+ }
709+ int ret_build_index = obvectorlib::build_index (index_handler, vectors, ids, dim, num_vectors);
710+
711+ int64_t num_size = 0 ;
712+ int ret_get_element = obvectorlib::get_index_number (index_handler, num_size);
713+ std::cout<<" after add index, size is " <<num_size<<" " <<ret_get_element<<std::endl;
714+
715+ const float * result_dist;
716+ const int64_t * result_ids;
717+ int64_t result_size = 0 ;
718+ auto query_vector = new float [dim];
719+ for (int64_t i = 0 ; i < dim; ++i) {
720+ query_vector[i] = distrib_real (rng);
721+ }
722+
723+ roaring::api::roaring64_bitmap_t * r1 = roaring::api::roaring64_bitmap_create ();
724+
725+ roaring::api::roaring64_bitmap_add (r1, 18 );
726+ roaring::api::roaring64_bitmap_add (r1, 1169 );
727+ roaring::api::roaring64_bitmap_add (r1, 1285 );
728+ std::cout << " before search" << std::endl;
729+ TestFilter testfilter (r1);
730+ const char *extra_info = nullptr ;
731+ int ret_knn_search = obvectorlib::knn_search (index_handler, query_vector, dim, 10 ,
732+ result_dist,result_ids,result_size,
733+ 100 , false /* need_extra_info*/ , extra_info, &testfilter);
734+
735+ for (int i = 0 ; i < result_size; i++) {
736+ std::cout << " result: " << result_ids[i] << " " << result_dist[i] << std::endl;
737+ }
738+ int inc_num = 1000 ;
739+ auto inc = new float [dim * inc_num];
740+ for (int64_t i = 0 ; i < dim * inc_num; ++i) {
741+ inc[i] = distrib_real (rng);
742+ }
743+ auto ids2 = new int64_t [inc_num];
744+ for (int64_t i = 0 ; i < inc_num; ++i) {
745+ ids2[i] = i + num_vectors*100 ;
746+ }
747+ obvectorlib::delete_index (index_handler);
748+ free (test_ptr);
749+ return 0 ;
750+ }
751+
673752int
674753main () {
675754 hnswsq_example ();
676755 example ();
677- example_extra_info ();
756+ // example_extra_info();
678757 hnsw_iter_filter_example ();
679758 hgraph_iter_filter_example ();
759+ hnswbq_example ();
680760 return 0 ;
681761}
0 commit comments