Similarity: fallback on tags if the artist or release has no track containing features
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user