This is an automated email from the ASF dual-hosted git repository. kxiao pushed a commit to branch branch-2.0 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 7063105870bca7be7cc3a03759dca37cf6c84090 Author: zzzxl <33418555+zzzxl1...@users.noreply.github.com> AuthorDate: Fri Aug 25 10:14:02 2023 +0800 [Optimize](index) Optimize implement the new internal lucene index query interface (#23389) --- be/src/clucene | 2 +- .../rowset/segment_v2/inverted_index_reader.cpp | 53 +++++++++++++++++----- 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/be/src/clucene b/be/src/clucene index dda894af51..fa33b52263 160000 --- a/be/src/clucene +++ b/be/src/clucene @@ -1 +1 @@ -Subproject commit dda894af51024226f10336eea3d344cebeef310d +Subproject commit fa33b522639948f7845b6500910172f55eeae13a diff --git a/be/src/olap/rowset/segment_v2/inverted_index_reader.cpp b/be/src/olap/rowset/segment_v2/inverted_index_reader.cpp index 99e0fe1f1f..50b9196b7d 100644 --- a/be/src/olap/rowset/segment_v2/inverted_index_reader.cpp +++ b/be/src/olap/rowset/segment_v2/inverted_index_reader.cpp @@ -294,12 +294,28 @@ Status FullTextIndexReader::query(OlapReaderStatistics* stats, const std::string } try { - SCOPED_RAW_TIMER(&stats->inverted_index_searcher_search_timer); - index_searcher->_search(query.get(), [&term_match_bitmap](const int32_t docid, - const float_t /*score*/) { - // docid equal to rowid in segment - term_match_bitmap->add(docid); - }); + if (query_type == InvertedIndexQueryType::MATCH_ANY_QUERY || + query_type == InvertedIndexQueryType::MATCH_ALL_QUERY || + query_type == InvertedIndexQueryType::EQUAL_QUERY) { + SCOPED_RAW_TIMER(&stats->inverted_index_searcher_search_timer); + index_searcher->_search(query.get(), [&term_match_bitmap](DocRange* docRange) { + if (docRange->type_ == DocRangeType::kMany) { + term_match_bitmap->addMany(docRange->doc_many_size_, + docRange->doc_many.data()); + } else { + term_match_bitmap->addRange(docRange->doc_range.first, + docRange->doc_range.second); + } + }); + } else { + SCOPED_RAW_TIMER(&stats->inverted_index_searcher_search_timer); + index_searcher->_search( + query.get(), + [&term_match_bitmap](const int32_t docid, const float_t /*score*/) { + // docid equal to rowid in segment + term_match_bitmap->add(docid); + }); + } } catch (const CLuceneError& e) { return Status::Error<ErrorCode::INVERTED_INDEX_CLUCENE_ERROR>( "CLuceneError occured: {}", e.what()); @@ -518,12 +534,25 @@ Status StringTypeInvertedIndexReader::query(OlapReaderStatistics* stats, read_null_bitmap(&null_bitmap_cache_handle, index_searcher->getReader()->directory()); try { - SCOPED_RAW_TIMER(&stats->inverted_index_searcher_search_timer); - index_searcher->_search(query.get(), - [&result](const int32_t docid, const float_t /*score*/) { - // docid equal to rowid in segment - result.add(docid); - }); + if (query_type == InvertedIndexQueryType::MATCH_ANY_QUERY || + query_type == InvertedIndexQueryType::MATCH_ALL_QUERY || + query_type == InvertedIndexQueryType::EQUAL_QUERY) { + SCOPED_RAW_TIMER(&stats->inverted_index_searcher_search_timer); + index_searcher->_search(query.get(), [&result](DocRange* docRange) { + if (docRange->type_ == DocRangeType::kMany) { + result.addMany(docRange->doc_many_size_, docRange->doc_many.data()); + } else { + result.addRange(docRange->doc_range.first, docRange->doc_range.second); + } + }); + } else { + SCOPED_RAW_TIMER(&stats->inverted_index_searcher_search_timer); + index_searcher->_search(query.get(), + [&result](const int32_t docid, const float_t /*score*/) { + // docid equal to rowid in segment + result.add(docid); + }); + } } catch (const CLuceneError& e) { if (_is_range_query(query_type) && e.number() == CL_ERR_TooManyClauses) { return Status::Error<ErrorCode::INVERTED_INDEX_BYPASS>( --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org