aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-06-05 16:42:45 +0200
committerTor Egge <Tor.Egge@online.no>2023-06-05 16:42:45 +0200
commitc0d9b10280db007e376bbc28d75f8b774db2f9a8 (patch)
tree3b35a69f6006dc36ab139b24fa057f200a3fe03e /streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp
parent678fa9ff6d6e363416ec7fe400395c9f3003934e (diff)
Setup distance metrics for streaming search.
Add range checks when converting to internal distance threshold.
Diffstat (limited to 'streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp')
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp b/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp
index 98ed8a26938..f6ac3a6c88a 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp
+++ b/streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp
@@ -313,6 +313,23 @@ void FieldSearchSpecMap::buildSearcherMap(const StringFieldIdTMapT & fieldsInQue
std::sort(fieldSearcherMap.begin(), fieldSearcherMap.end(), lesserField);
}
+search::attribute::DistanceMetric
+FieldSearchSpecMap::get_distance_metric(const vespalib::string& name) const
+{
+ auto dm = search::attribute::DistanceMetric::Euclidean;
+ auto fid = _nameIdMap.fieldNo(name);
+ if (fid == vsm::StringFieldIdTMap::npos) {
+ return dm;
+ }
+ auto itr = _specMap.find(fid);
+ if (itr == _specMap.end()) {
+ return dm;
+ }
+ if (!itr->second.uses_nearest_neighbor_search_method()) {
+ return dm;
+ }
+ return vsm::NearestNeighborFieldSearcher::distance_metric_from_string(itr->second.get_arg1());
+}
vespalib::asciistream & operator <<(vespalib::asciistream & os, const FieldSearchSpecMap & df)
{