This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 5a5b0c07d7e2ebfc35876e14c6f4173f4d03ea27 Author: zzzxl <33418555+zzzxl1...@users.noreply.github.com> AuthorDate: Thu Apr 18 10:03:07 2024 +0800 [fix](inverted index) fix incorrect case test_index_delete (#33609) --- .../inverted_index/query/disjunction_query.cpp | 48 ++++++++-------------- .../inverted_index/query/disjunction_query.h | 7 ++-- 2 files changed, 19 insertions(+), 36 deletions(-) diff --git a/be/src/olap/rowset/segment_v2/inverted_index/query/disjunction_query.cpp b/be/src/olap/rowset/segment_v2/inverted_index/query/disjunction_query.cpp index 0514e1a372a..650a88c0646 100644 --- a/be/src/olap/rowset/segment_v2/inverted_index/query/disjunction_query.cpp +++ b/be/src/olap/rowset/segment_v2/inverted_index/query/disjunction_query.cpp @@ -23,59 +23,43 @@ DisjunctionQuery::DisjunctionQuery(const std::shared_ptr<lucene::search::IndexSe const TQueryOptions& query_options) : _searcher(searcher) {} -DisjunctionQuery::~DisjunctionQuery() { - for (auto& term_doc : _term_docs) { - if (term_doc) { - _CLDELETE(term_doc); - } - } - for (auto& term : _terms) { - if (term) { - _CLDELETE(term); - } - } -} - void DisjunctionQuery::add(const std::wstring& field_name, const std::vector<std::string>& terms) { if (terms.empty()) { _CLTHROWA(CL_ERR_IllegalArgument, "DisjunctionQuery::add: terms empty"); } - for (const auto& term : terms) { - std::wstring ws_term = StringUtil::string_to_wstring(term); - Term* t = _CLNEW Term(field_name.c_str(), ws_term.c_str()); - _terms.push_back(t); - TermDocs* term_doc = _searcher->getReader()->termDocs(t); - _term_docs.push_back(term_doc); - _term_iterators.emplace_back(term_doc); - } + _field_name = field_name; + _terms = terms; } void DisjunctionQuery::search(roaring::Roaring& roaring) { - roaring::Roaring result; - auto func = [&roaring](const TermIterator& term_docs, bool first) { - roaring::Roaring result; + auto func = [this, &roaring](const std::string& term, bool first) { + std::wstring ws_term = StringUtil::string_to_wstring(term); + auto* t = _CLNEW Term(_field_name.c_str(), ws_term.c_str()); + auto* term_doc = _searcher->getReader()->termDocs(t); + TermIterator iterator(term_doc); + DocRange doc_range; - while (term_docs.readRange(&doc_range)) { + roaring::Roaring result; + while (iterator.readRange(&doc_range)) { if (doc_range.type_ == DocRangeType::kMany) { result.addMany(doc_range.doc_many_size_, doc_range.doc_many->data()); } else { result.addRange(doc_range.doc_range.first, doc_range.doc_range.second); } } + + _CLDELETE(term_doc); + _CLDELETE(t); + if (first) { roaring.swap(result); } else { roaring |= result; } }; - for (int i = 0; i < _term_iterators.size(); i++) { - auto& iter = _term_iterators[i]; - if (i == 0) { - func(iter, true); - } else { - func(iter, false); - } + for (int i = 0; i < _terms.size(); i++) { + func(_terms[i], i == 0); } } diff --git a/be/src/olap/rowset/segment_v2/inverted_index/query/disjunction_query.h b/be/src/olap/rowset/segment_v2/inverted_index/query/disjunction_query.h index 9a1e5df759c..35783146157 100644 --- a/be/src/olap/rowset/segment_v2/inverted_index/query/disjunction_query.h +++ b/be/src/olap/rowset/segment_v2/inverted_index/query/disjunction_query.h @@ -28,7 +28,7 @@ class DisjunctionQuery : public Query { public: DisjunctionQuery(const std::shared_ptr<lucene::search::IndexSearcher>& searcher, const TQueryOptions& query_options); - ~DisjunctionQuery() override; + ~DisjunctionQuery() override = default; void add(const std::wstring& field_name, const std::vector<std::string>& terms) override; void search(roaring::Roaring& roaring) override; @@ -36,9 +36,8 @@ public: private: std::shared_ptr<lucene::search::IndexSearcher> _searcher; - std::vector<Term*> _terms; - std::vector<TermDocs*> _term_docs; - std::vector<TermIterator> _term_iterators; + std::wstring _field_name; + std::vector<std::string> _terms; }; } // namespace doris::segment_v2 \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org