22 #include "../common/type.hpp"
24 #include "jubatus/util/concurrent/rwmutex.h"
37 namespace nearest_neighbor {
41 jubatus::util::lang::shared_ptr<storage::column_table> table,
42 const std::string&
id)
43 : nearest_neighbor_base(table, id),
45 vector<column_type> schema;
50 bit_vector_nearest_neighbor_base::bit_vector_nearest_neighbor_base(
52 jubatus::util::lang::shared_ptr<column_table> table,
53 vector<column_type>& schema,
54 const std::string&
id)
55 : nearest_neighbor_base(table, id),
60 void bit_vector_nearest_neighbor_base::set_row(
66 get_table()->add(
id,
owner(my_id_), hash(sfv));
69 void bit_vector_nearest_neighbor_base::neighbor_row(
71 vector<pair<string, float> >& ids,
72 uint64_t ret_num)
const {
73 util::concurrent::scoped_rlock lk(get_const_table()->get_mutex());
74 neighbor_row_from_hash(hash(query), ids, ret_num);
77 void bit_vector_nearest_neighbor_base::neighbor_row(
78 const string& query_id,
79 vector<pair<string, float> >& ids,
80 uint64_t ret_num)
const {
82 util::concurrent::scoped_rlock lk(table.
get_mutex());
83 const pair<bool, uint64_t> maybe_index = table.
exact_match(query_id);
84 if (!maybe_index.first) {
90 neighbor_row_from_hash(col[maybe_index.second], ids, ret_num);
93 void bit_vector_nearest_neighbor_base::fill_schema(
94 vector<column_type>& schema) {
95 bit_vector_column_id_ = schema.size();
96 schema.push_back(
column_type(column_type::bit_vector_type, bitnum_));
101 return get_const_table()->get_bit_vector_column(bit_vector_column_id_);
104 void bit_vector_nearest_neighbor_base::neighbor_row_from_hash(
106 vector<pair<string, float> >& ids,
107 uint64_t ret_num)
const {
108 vector<pair<uint64_t, float> > scores;
111 jubatus::util::lang::shared_ptr<const column_table> table = get_const_table();
113 for (
size_t i = 0; i < scores.size(); ++i) {
114 ids.push_back(make_pair(table->get_key_nolock(scores[i].first),
void ranking_hamming_bit_vectors(const bit_vector &query, const const_bit_vector_column &bvs, vector< pair< uint64_t, float > > &ret, uint64_t ret_num)
std::pair< bool, uint64_t > exact_match(const std::string &prefix) const
const bit_vector_column const_bit_vector_column
bit_vector_base< uint64_t > bit_vector
util::concurrent::rw_mutex & get_mutex() const
typed_column< bit_vector > bit_vector_column
std::vector< std::pair< std::string, float > > sfv_t
bit_vector_nearest_neighbor_base(uint32_t bitnum, jubatus::util::lang::shared_ptr< storage::column_table > table, const std::string &id)