aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-06-09 09:55:30 +0000
committerArne Juul <arnej@verizonmedia.com>2020-06-09 09:55:30 +0000
commitdeb796350824755ec9cefca91c9a5b6835e6a795 (patch)
treee4a93df1f8e3672a49d4a24dbdb84adaa1b42485 /searchlib
parentf9f0e7a1f555b092739a1b30704bf7550348c129 (diff)
construct HnswGraph::EntryNode directly
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/tensor/hnsw_saver/hnsw_save_load_test.cpp10
-rw-r--r--searchlib/src/vespa/searchlib/tensor/hnsw_graph.cpp2
-rw-r--r--searchlib/src/vespa/searchlib/tensor/hnsw_graph.h9
-rw-r--r--searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp18
-rw-r--r--searchlib/src/vespa/searchlib/tensor/hnsw_index_loader.cpp5
5 files changed, 15 insertions, 29 deletions
diff --git a/searchlib/src/tests/tensor/hnsw_saver/hnsw_save_load_test.cpp b/searchlib/src/tests/tensor/hnsw_saver/hnsw_save_load_test.cpp
index b0a82abec25..bcc886fccad 100644
--- a/searchlib/src/tests/tensor/hnsw_saver/hnsw_save_load_test.cpp
+++ b/searchlib/src/tests/tensor/hnsw_saver/hnsw_save_load_test.cpp
@@ -49,10 +49,7 @@ void populate(HnswGraph &graph) {
graph.set_link_array(6, 0, V{1, 2, 4});
graph.set_link_array(2, 1, V{4});
graph.set_link_array(4, 1, V{2});
- HnswGraph::EntryNode entry;
- entry.docid = 2;
- entry.level = 1;
- graph.set_entry_node(entry);
+ graph.set_entry_node({2, 1});
}
void modify(HnswGraph &graph) {
@@ -66,10 +63,7 @@ void modify(HnswGraph &graph) {
graph.set_link_array(4, 1, V{7});
graph.set_link_array(7, 1, V{4});
- HnswGraph::EntryNode entry;
- entry.docid = 4;
- entry.level = 1;
- graph.set_entry_node(entry);
+ graph.set_entry_node({4, 1});
}
diff --git a/searchlib/src/vespa/searchlib/tensor/hnsw_graph.cpp b/searchlib/src/vespa/searchlib/tensor/hnsw_graph.cpp
index 30796b8f2a9..37e3ea1adbd 100644
--- a/searchlib/src/vespa/searchlib/tensor/hnsw_graph.cpp
+++ b/searchlib/src/vespa/searchlib/tensor/hnsw_graph.cpp
@@ -14,8 +14,6 @@ HnswGraph::HnswGraph()
entry_docid_and_level()
{
EntryNode entry;
- entry.docid = 0; // Note that docid 0 is reserved and never used
- entry.level = -1;
set_entry_node(entry);
}
diff --git a/searchlib/src/vespa/searchlib/tensor/hnsw_graph.h b/searchlib/src/vespa/searchlib/tensor/hnsw_graph.h
index 9567d6e7d03..125692af627 100644
--- a/searchlib/src/vespa/searchlib/tensor/hnsw_graph.h
+++ b/searchlib/src/vespa/searchlib/tensor/hnsw_graph.h
@@ -66,7 +66,14 @@ struct HnswGraph {
struct EntryNode {
uint32_t docid;
int32_t level;
- EntryNode() : docid(0), level(-1) {}
+ EntryNode()
+ : docid(0), // Note that docid 0 is reserved and never used
+ level(-1)
+ {}
+ EntryNode(uint32_t docid_in, int32_t level_in)
+ : docid(docid_in),
+ level(level_in)
+ {}
};
void set_entry_node(EntryNode node) {
diff --git a/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp b/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp
index 2b15b7b0e5f..e6486fedf2e 100644
--- a/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp
+++ b/searchlib/src/vespa/searchlib/tensor/hnsw_index.cpp
@@ -278,9 +278,7 @@ HnswIndex::add_document(uint32_t docid)
_graph.make_node_for_document(docid, level + 1);
auto entry = _graph.get_entry_node();
if (entry.docid == 0) {
- entry.docid = docid;
- entry.level = level;
- _graph.set_entry_node(entry);
+ _graph.set_entry_node({docid, level});
return;
}
@@ -305,9 +303,7 @@ HnswIndex::add_document(uint32_t docid)
--search_level;
}
if (level > get_entry_level()) {
- entry.docid = docid;
- entry.level = level;
- _graph.set_entry_node(entry);
+ _graph.set_entry_node({docid, level});
}
}
@@ -347,10 +343,7 @@ HnswIndex::remove_document(uint32_t docid)
LinkArrayRef my_links = _graph.get_link_array(docid, level);
for (uint32_t neighbor_id : my_links) {
if (need_new_entrypoint) {
- HnswGraph::EntryNode entry;
- entry.docid = neighbor_id;
- entry.level = level;
- _graph.set_entry_node(entry);
+ _graph.set_entry_node({neighbor_id, level});
need_new_entrypoint = false;
}
remove_link_to(neighbor_id, docid, level);
@@ -526,10 +519,7 @@ HnswIndex::set_node(uint32_t docid, const HnswNode &node)
}
int max_level = num_levels - 1;
if (get_entry_level() < max_level) {
- HnswGraph::EntryNode entry;
- entry.docid = docid;
- entry.level = max_level;
- _graph.set_entry_node(entry);
+ _graph.set_entry_node({docid, max_level});
}
}
diff --git a/searchlib/src/vespa/searchlib/tensor/hnsw_index_loader.cpp b/searchlib/src/vespa/searchlib/tensor/hnsw_index_loader.cpp
index 8d8b4204063..9f49c0647c6 100644
--- a/searchlib/src/vespa/searchlib/tensor/hnsw_index_loader.cpp
+++ b/searchlib/src/vespa/searchlib/tensor/hnsw_index_loader.cpp
@@ -39,10 +39,7 @@ HnswIndexLoader::load(const fileutil::LoadedBuffer& buf)
}
if (_failed) return false;
_graph.node_refs.ensure_size(num_nodes);
- HnswGraph::EntryNode entry;
- entry.docid = entry_docid;
- entry.level = entry_level;
- _graph.set_entry_node(entry);
+ _graph.set_entry_node({entry_docid, entry_level});
return true;
}