diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-06-05 16:42:45 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-06-05 16:42:45 +0200 |
commit | c0d9b10280db007e376bbc28d75f8b774db2f9a8 (patch) | |
tree | 3b35a69f6006dc36ab139b24fa057f200a3fe03e /streamingvisitors/src/vespa/vsm/vsm/fieldsearchspec.cpp | |
parent | 678fa9ff6d6e363416ec7fe400395c9f3003934e (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.cpp | 17 |
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) { |