Similarity: fallback on tags if the artist or release has no track containing features

This commit is contained in:
emeric
2019-03-21 13:06:25 +01:00
parent 37e87ccc1c
commit 368766974e
3 changed files with 21 additions and 2 deletions
+6 -2
View File
@@ -60,7 +60,9 @@ Searcher::getSimilarReleases(Wt::Dbo::Session& session, Database::IdType release
auto somSearcher = _somAddon.getSearcher(); auto somSearcher = _somAddon.getSearcher();
if (method == Database::SimilaritySettings::PreferredMethod::Features if (method == Database::SimilaritySettings::PreferredMethod::Features
|| (method == Database::SimilaritySettings::PreferredMethod::Auto && somSearcher)) || (method == Database::SimilaritySettings::PreferredMethod::Auto
&& somSearcher
&& somSearcher->isReleaseClassified(releaseId)))
{ {
return somSearcher->getSimilarReleases(releaseId, maxCount); return somSearcher->getSimilarReleases(releaseId, maxCount);
} }
@@ -75,7 +77,9 @@ Searcher::getSimilarArtists(Wt::Dbo::Session& session, Database::IdType artistId
auto somSearcher = _somAddon.getSearcher(); auto somSearcher = _somAddon.getSearcher();
if (method == Database::SimilaritySettings::PreferredMethod::Features if (method == Database::SimilaritySettings::PreferredMethod::Features
|| (method == Database::SimilaritySettings::PreferredMethod::Auto && somSearcher)) || (method == Database::SimilaritySettings::PreferredMethod::Auto
&& somSearcher
&& somSearcher->isArtistClassified(artistId)))
{ {
return somSearcher->getSimilarArtists(artistId, maxCount); return somSearcher->getSimilarArtists(artistId, maxCount);
} }
@@ -221,6 +221,18 @@ FeaturesSearcher::isValid() const
return _network.get() != nullptr; return _network.get() != nullptr;
} }
bool
FeaturesSearcher::isReleaseClassified(Database::IdType releaseId) const
{
return (_releasePositions.find(releaseId) != _releasePositions.end());
}
bool
FeaturesSearcher::isArtistClassified(Database::IdType artistId) const
{
return (_artistPositions.find(artistId) != _artistPositions.end());
}
std::vector<Database::IdType> std::vector<Database::IdType>
FeaturesSearcher::getSimilarTracks(const std::set<Database::IdType>& tracksIds, std::size_t maxCount) const FeaturesSearcher::getSimilarTracks(const std::set<Database::IdType>& tracksIds, std::size_t maxCount) const
{ {
@@ -43,6 +43,9 @@ class FeaturesSearcher
bool isValid() const; bool isValid() const;
bool isReleaseClassified(Database::IdType releaseId) const;
bool isArtistClassified(Database::IdType releaseId) const;
std::vector<Database::IdType> getSimilarTracks(const std::set<Database::IdType>& tracksId, std::size_t maxCount) const; std::vector<Database::IdType> getSimilarTracks(const std::set<Database::IdType>& tracksId, std::size_t maxCount) const;
std::vector<Database::IdType> getSimilarReleases(Database::IdType releaseId, std::size_t maxCount) const; std::vector<Database::IdType> getSimilarReleases(Database::IdType releaseId, std::size_t maxCount) const;
std::vector<Database::IdType> getSimilarArtists(Database::IdType artistId, std::size_t maxCount) const; std::vector<Database::IdType> getSimilarArtists(Database::IdType artistId, std::size_t maxCount) const;