diff --git a/include/pisa/intersection.hpp b/include/pisa/intersection.hpp index ca0efb08..853e33b7 100644 --- a/include/pisa/intersection.hpp +++ b/include/pisa/intersection.hpp @@ -25,7 +25,7 @@ namespace intersection { /// Returns a filtered copy of `query` containing only terms indicated by ones in the bit mask. [[nodiscard]] inline auto filter(Query const& query, Mask const& mask) -> Query { if (query.terms().size() > MAX_QUERY_LEN) { - throw std::invalid_argument("Queries can be at most 2^32 terms long"); + throw std::invalid_argument("Queries can be at most 2^31 terms long"); } std::vector terms; std::vector weights; diff --git a/tools/compute_intersection.cpp b/tools/compute_intersection.cpp index c960f358..bb54b456 100644 --- a/tools/compute_intersection.cpp +++ b/tools/compute_intersection.cpp @@ -48,6 +48,9 @@ void intersect( auto print_intersection = [&](auto const& query, auto const& mask) { auto intersection = Intersection::compute(index, wdata, scorer, query, mask); + if (0U == intersection.length) { + return; + } std::cout << fmt::format( "{}\t{}\t{}\t{}\n", query.id() ? *query.id() : std::to_string(qid), @@ -62,6 +65,9 @@ void intersect( for_all_subsets(query, max_term_count, print_intersection); } else { auto intersection = Intersection::compute(index, wdata, scorer, query); + if (0U == intersection.length) { + continue; + } std::cout << fmt::format( "{}\t{}\t{}\n", query.id() ? *query.id() : std::to_string(qid),