// Copyright 2025 PingCAP, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #pragma once #include #include #include #include #include #include namespace DB::DM { class FullTextIndexReader : public ICacheableLocalIndexReader { public: static FullTextIndexReaderPtr createFromMmap(rust::Str index_path) { return std::make_shared(ClaraFTS::new_mmap_index_reader(index_path)); } static FullTextIndexReaderPtr createFromMemory(rust::Slice data) { return std::make_shared(ClaraFTS::new_memory_index_reader_2(data)); } explicit FullTextIndexReader(rust::Box && inner_) : inner(std::move(inner_)) {} void searchNoScore( const FullTextIndexPerfPtr & perf, rust::Str query, const BitmapFilterView & valid_rows, rust::Vec & results) const; void searchScored( const FullTextIndexPerfPtr & perf, rust::Str query, const BitmapFilterView & valid_rows, rust::Vec & results) const; auto get(UInt32 doc_id, rust::String & result) const { return inner->get(doc_id, result); } private: rust::Box inner; }; } // namespace DB::DM