summaryrefslogtreecommitdiffstats
path: root/searchlib/src
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2022-03-29 09:15:09 +0000
committerGeir Storli <geirst@yahooinc.com>2022-03-29 09:15:09 +0000
commitd06babfc8b488011604d9571aada99e261b328f6 (patch)
tree58695f6aae6b6f589d3a77ee4f7996aca8ce58f0 /searchlib/src
parent9bced6805fe2d89f9ba316399474a831c85985ff (diff)
Add more tracing around decision-making for global filter usage.
Diffstat (limited to 'searchlib/src')
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.cpp21
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.h3
2 files changed, 22 insertions, 2 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.cpp
index 7002b4dda71..2170bc4ad2a 100644
--- a/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.cpp
@@ -69,7 +69,9 @@ NearestNeighborBlueprint::NearestNeighborBlueprint(const queryeval::FieldSpec& f
_fallback_dist_fun(),
_distance_heap(target_num_hits),
_found_hits(),
- _global_filter(GlobalFilter::create())
+ _global_filter(GlobalFilter::create()),
+ _global_filter_hits(),
+ _global_filter_hit_ratio()
{
CellType attr_ct = _attr_tensor.getTensorType().cell_type();
_fallback_dist_fun = search::tensor::make_distance_function(_attr_tensor.distance_metric(), attr_ct);
@@ -118,6 +120,8 @@ NearestNeighborBlueprint::set_global_filter(const GlobalFilter &global_filter)
} else {
est_hits = std::min(est_hits, max_hits);
}
+ _global_filter_hits = max_hits;
+ _global_filter_hit_ratio = max_hit_ratio;
}
if (_approximate) {
est_hits = std::min(est_hits, _target_num_hits);
@@ -164,8 +168,21 @@ NearestNeighborBlueprint::visitMembers(vespalib::ObjectVisitor& visitor) const
visitor.visitString("attribute_tensor", _attr_tensor.getTensorType().to_spec());
visitor.visitString("query_tensor", _query_tensor->type().to_spec());
visitor.visitInt("target_num_hits", _target_num_hits);
- visitor.visitBool("approximate", _approximate);
visitor.visitInt("explore_additional_hits", _explore_additional_hits);
+ visitor.visitBool("approximate", _approximate);
+ visitor.visitBool("has_index", _attr_tensor.nearest_neighbor_index());
+ visitor.visitInt("top_k_found_hits", _found_hits.size());
+
+ visitor.openStruct("global_filter", "GlobalFilter");
+ visitor.visitBool("exists", (_global_filter && _global_filter->has_filter()));
+ visitor.visitFloat("brute_force_limit", _brute_force_limit);
+ if (_global_filter_hits.has_value()) {
+ visitor.visitInt("hits", _global_filter_hits.value());
+ }
+ if (_global_filter_hit_ratio.has_value()) {
+ visitor.visitFloat("hit_ratio", _global_filter_hit_ratio.value());
+ }
+ visitor.closeStruct();
}
bool
diff --git a/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.h
index 159440f4fd5..e318c53a25a 100644
--- a/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/nearest_neighbor_blueprint.h
@@ -5,6 +5,7 @@
#include "nearest_neighbor_distance_heap.h"
#include <vespa/searchlib/tensor/distance_function.h>
#include <vespa/searchlib/tensor/nearest_neighbor_index.h>
+#include <optional>
namespace search::tensor { class ITensorAttribute; }
namespace vespalib::eval { struct Value; }
@@ -31,6 +32,8 @@ private:
mutable NearestNeighborDistanceHeap _distance_heap;
std::vector<search::tensor::NearestNeighborIndex::Neighbor> _found_hits;
std::shared_ptr<const GlobalFilter> _global_filter;
+ std::optional<uint32_t> _global_filter_hits;
+ std::optional<double> _global_filter_hit_ratio;
void perform_top_k();
public: