diff --git a/search/bookmarks/processor.cpp b/search/bookmarks/processor.cpp index 704d6a9525..db4aa8de87 100644 --- a/search/bookmarks/processor.cpp +++ b/search/bookmarks/processor.cpp @@ -27,6 +27,11 @@ struct RankingInfo return m_cosineSimilarity > rhs.m_cosineSimilarity; } + bool operator>(RankingInfo const & rhs) const { return rhs < *this; } + + bool operator==(RankingInfo const & rhs) const { return !(*this < rhs) && !(*this > rhs); } + bool operator!=(RankingInfo const & rhs) const { return !(*this == rhs); } + double m_cosineSimilarity = 0.0; }; @@ -34,7 +39,12 @@ struct IdInfoPair { IdInfoPair(Processor::Id const & id, RankingInfo const & info) : m_id(id), m_info(info) {} - bool operator<(IdInfoPair const & rhs) const { return m_info < rhs.m_info; } + bool operator<(IdInfoPair const & rhs) const + { + if (m_info != rhs.m_info) + return m_info < rhs.m_info; + return m_id < rhs.m_id; + } Processor::Id m_id; RankingInfo m_info; diff --git a/search/bookmarks/processor.hpp b/search/bookmarks/processor.hpp index 5bce079c08..dbe0b50b99 100644 --- a/search/bookmarks/processor.hpp +++ b/search/bookmarks/processor.hpp @@ -9,8 +9,8 @@ #include "search/utils.hpp" #include -#include #include +#include #include namespace search @@ -53,7 +53,7 @@ private: QueryVec GetQueryVec(IdfMap & idfs, QueryParams const & params) const; Index m_index; - unordered_map m_docs; + std::unordered_map m_docs; }; } // namespace bookmarks } // namespace search diff --git a/search/search_tests/bookmarks_processor_tests.cpp b/search/search_tests/bookmarks_processor_tests.cpp index e0d5f8e702..604c83c1e2 100644 --- a/search/search_tests/bookmarks_processor_tests.cpp +++ b/search/search_tests/bookmarks_processor_tests.cpp @@ -23,6 +23,7 @@ public: void Add(Id const & id, Doc const & doc) { m_processor.Add(id, doc); } void Erase(Id const & id, Doc const & doc) { m_processor.Erase(id, doc); } + vector Search(string const & query) const { vector tokens; @@ -53,8 +54,8 @@ UNIT_CLASS_TEST(BookmarksProcessorTest, Smoke) Add(18, {"Silver Mustang Casino" /* name */, "Joyful place, owners Bradley and Rodney are very friendly!", "Entertainment"}); - Add(20, {"Great Nothern Hotel" /* name */, "Clean place with a reasonably price" /* description */, - "Hotel" /* type */}); + Add(20, {"Great Northern Hotel" /* name */, + "Clean place with a reasonable price" /* description */, "Hotel" /* type */}); TEST_EQUAL(Search("R&R food"), vector({10}), ()); TEST_EQUAL(Search("cherry pie"), vector({10}), ());