Skip to content

Commit 28b370c

Browse files
authored
fix(global_index): compatibility for legacy lumina index type (#247) (#249)
1 parent c7d5812 commit 28b370c

22 files changed

Lines changed: 825 additions & 131 deletions

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ if(NOT CMAKE_BUILD_TYPE)
3232
endif()
3333

3434
project(paimon
35-
VERSION 0.1.2
35+
VERSION 0.1.3
3636
DESCRIPTION "Paimon C++ Project")
3737

3838
string(TOUPPER "${CMAKE_BUILD_TYPE}" UPPERCASE_BUILD_TYPE)

docs/source/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113
# The master toctree document.
114114
master_doc = "index"
115115

116-
version = "0.1.2"
116+
version = "0.1.3"
117117

118118
html_theme_options = {
119119
"show_toc_level": 2,

src/paimon/common/global_index/global_indexer_factory.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,9 @@ const char GlobalIndexerFactory::GLOBAL_INDEX_IDENTIFIER_SUFFIX[] = "-global";
2828

2929
Result<std::unique_ptr<GlobalIndexer>> GlobalIndexerFactory::Get(
3030
const std::string& identifier, const std::map<std::string, std::string>& options) {
31-
std::string global_index_identifier = identifier + GLOBAL_INDEX_IDENTIFIER_SUFFIX;
31+
// Compatibility: "lumina-vector-ann" was the old identifier for lumina global index.
32+
std::string final_identifier = (identifier == "lumina-vector-ann" ? "lumina" : identifier);
33+
std::string global_index_identifier = final_identifier + GLOBAL_INDEX_IDENTIFIER_SUFFIX;
3234
auto factory_creator = FactoryCreator::GetInstance();
3335
if (factory_creator == nullptr) {
3436
assert(false);

src/paimon/common/global_index/global_indexer_factory_test.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,17 @@ TEST(GlobalIndexerFactoryTest, TestNonExist) {
3838
GlobalIndexerFactory::Get("nonexist", options));
3939
ASSERT_FALSE(indexer);
4040
}
41+
42+
TEST(GlobalIndexerFactoryTest, TestLuminaVectorAnnCompatibility) {
43+
// "lumina-vector-ann" should be treated as "lumina" for backward compatibility.
44+
// Both identifiers should produce the same result (either both succeed or both return nullptr
45+
// depending on whether the lumina module is linked).
46+
std::map<std::string, std::string> options;
47+
ASSERT_OK_AND_ASSIGN(std::unique_ptr<GlobalIndexer> lumina_vector_ann_indexer,
48+
GlobalIndexerFactory::Get("lumina-vector-ann", options));
49+
ASSERT_OK_AND_ASSIGN(std::unique_ptr<GlobalIndexer> lumina_indexer,
50+
GlobalIndexerFactory::Get("lumina", options));
51+
52+
ASSERT_EQ(static_cast<bool>(lumina_vector_ann_indexer), static_cast<bool>(lumina_indexer));
53+
}
4154
} // namespace paimon::test

test/inte/global_index_test.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2232,6 +2232,15 @@ TEST_P(GlobalIndexTest, TestLuceneWriteCommitScanReadIndexWithScore) {
22322232
/*pre_filter=*/std::nullopt)));
22332233
ASSERT_TRUE(index_result->ToString().find("row ids: {0,1,2}") != std::string::npos);
22342234
}
2235+
{
2236+
std::optional<RoaringBitmap64> pre_filter = RoaringBitmap64::From({1, 2, 3});
2237+
ASSERT_OK_AND_ASSIGN(
2238+
auto index_result,
2239+
index_reader->VisitFullTextSearch(std::make_shared<FullTextSearch>(
2240+
"f0",
2241+
/*limit=*/10, "document", FullTextSearch::SearchType::MATCH_ALL, pre_filter)));
2242+
ASSERT_TRUE(index_result->ToString().find("row ids: {1,2}") != std::string::npos);
2243+
}
22352244
{
22362245
ASSERT_OK_AND_ASSIGN(auto index_result,
22372246
index_reader->VisitFullTextSearch(std::make_shared<FullTextSearch>(

third_party/lumina/OptionsReference.md

Lines changed: 0 additions & 107 deletions
This file was deleted.

third_party/lumina/VERSION

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
tag: v0.1.0
2-
bd7ac880cf34af4d267fcaf16773627cad122463
1+
tag: v0.2.1
2+
c88ce90ed44b7037e3a307a36627cbd030e5eb60

third_party/lumina/include/lumina/api/Dataset.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
* limitations under the License.
1515
*/
1616

17-
1817
#pragma once
1918

2019
#include <cstdint>

third_party/lumina/include/lumina/core/Constants.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616

1717
#pragma once
18+
#include <cstdint>
1819
#include <string_view>
1920
namespace lumina::core {
2021

@@ -56,6 +57,7 @@ constexpr std::string_view kEncodingType = "encoding.type"; // Encoding type
5657
constexpr std::string_view kEncodingRawf32 = "rawf32";
5758
constexpr std::string_view kEncodingSQ8 = "sq8";
5859
constexpr std::string_view kEncodingPQ = "pq";
60+
constexpr std::string_view kEncodingRabitQ = "rabitq";
5961
constexpr std::string_view kEncodingDummy = "dummy";
6062

6163
// IO options
@@ -88,6 +90,7 @@ constexpr std::string_view kExtensionPrefix = "extension.";
8890
constexpr std::string_view kExtensionSearchWithFilter = "extension.search_with_filter";
8991
constexpr std::string_view kExtensionCkptThreshold = "extension.build.ckpt.threshold";
9092
constexpr std::string_view kExtensionCkptCount = "extension.build.ckpt.count";
93+
constexpr std::string_view kExtensionGetVector = "extension.search.get_vector";
9194

9295
/* constexpr std::string_view kExtensionFilterDsl = "filter.dsl"; */
9396
/* constexpr std::string_view kExtensionFilterTags = "filter.tags"; */

0 commit comments

Comments
 (0)