Skip to content

Commit 48b1ae6

Browse files
committed
Fuzzy Search is now at 80-85%
- Expanded aliases and curated positive/adversarial quality coverage. - Added safer whole-phrase alias matching and acronym normalization. - Formalized ASCII, UTF-8 rejection, resource, and threading contracts. - Added the opt-in benchmark and CI coverage. - Kept linear scanning: measured approximately 2.1 ms/query for 256 entries, 8.4 ms for 1,024, 31.9 ms for 4,096, and 128 ms for 16,384. - Documented the future immutable index boundary in OpenMeta/docs/fuzzy_search.md:1.
1 parent d506d6a commit 48b1ae6

23 files changed

Lines changed: 861 additions & 65 deletions

.github/workflows/ci.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,16 +154,21 @@ jobs:
154154
-DOPENMETA_BUILD_STATIC=ON
155155
-DOPENMETA_BUILD_SHARED=OFF
156156
-DOPENMETA_BUILD_TESTS=ON
157+
-DOPENMETA_BUILD_BENCHMARKS=ON
157158
-DOPENMETA_BUILD_PYTHON=OFF
158159
-DOPENMETA_WITH_DNG_SDK_ADAPTER=OFF
159160
160161
- name: Build fuzzy-search release gate
161162
run: >
162163
cmake --build build-fuzzy --parallel
163164
--target openmeta_gate_fuzzy_search_release
165+
openmeta_benchmark_fuzzy_search
164166
165167
- name: Run fuzzy-search release gate
166168
run: >
167169
ctest --test-dir build-fuzzy
168170
-R openmeta_fuzzy_search_release_gate
169171
--output-on-failure
172+
173+
- name: Run informational fuzzy-search benchmark
174+
run: ./build-fuzzy/openmeta_benchmark_fuzzy_search

CHANGES.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,33 @@
11
# OpenMeta Changes
22

3+
## 0.4.90 - 2026-07-30
4+
5+
Changes compared with `0.4.89`.
6+
7+
### Added
8+
9+
- Expanded the curated Fuzzy Search alias vocabulary and quality gate across
10+
descriptive, capture, geometry, color, RAW-processing, rights, location,
11+
lens, and history terminology.
12+
- Added metadata-like adversarial negatives plus explicit ASCII separator,
13+
camel-case, acronym-boundary, and UTF-8 policy tests.
14+
- Added the opt-in `OPENMETA_BUILD_BENCHMARKS` configuration and
15+
`openmeta_benchmark_fuzzy_search` deterministic scaling workload, compiled
16+
and executed by the RapidFuzz Release/libc++ CI job.
17+
- Added a dedicated Fuzzy Search contract covering ranking, resource and
18+
threading bounds, quality gates, benchmark use, and indexing policy.
19+
20+
### Changed
21+
22+
- Fuzzy alias typos now require whole-phrase and per-token similarity, avoiding
23+
unrelated matches caused by one shared word.
24+
- ASCII normalization now splits acronym-to-word boundaries such as
25+
`GPSLatitude` and `ICCProfile`.
26+
- Fuzzy Search readiness is now tracked at about 80-85%; the active project
27+
sequence moves to Creation, Editing, Transfer, Translation, and Writing.
28+
Fuzzy Search resumes before Adapters and Utilities for Unicode/multilingual
29+
behavior and an optional immutable large-store index.
30+
331
## 0.4.89 - 2026-07-30
432

533
Changes compared with `0.4.88`.

CMakeLists.txt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ option(OPENMETA_BUILD_STATIC "Build libopenmeta.a" ON)
2929
option(OPENMETA_BUILD_SHARED "Build libopenmeta.so/.dylib/.dll" ON)
3030
option(OPENMETA_BUILD_TOOLS "Build OpenMeta CLI tools" ON)
3131
option(OPENMETA_BUILD_TESTS "Build OpenMeta unit tests" OFF)
32+
option(OPENMETA_BUILD_BENCHMARKS "Build OpenMeta benchmark executables" OFF)
3233
option(OPENMETA_BUILD_FUZZERS "Build OpenMeta libFuzzer targets" OFF)
3334
option(OPENMETA_BUILD_FUZZTEST "Build OpenMeta fuzz tests (FuzzTest)" OFF)
3435
option(OPENMETA_FUZZTEST_FUZZING_MODE "Enable FuzzTest fuzzing mode flags" OFF)
@@ -41,7 +42,7 @@ option(OPENMETA_WITH_ZLIB "Enable zlib/deflate payload decompression" ON)
4142
option(OPENMETA_WITH_BROTLI "Enable brotli payload decompression" ON)
4243
option(OPENMETA_WITH_EXPAT "Enable XMP packet decode via Expat" ON)
4344
option(OPENMETA_ENABLE_RAPIDFUZZ
44-
"Enable RapidFuzz-backed metadata search and semantic query matching" OFF)
45+
"Enable RapidFuzz-backed metadata fuzzy search" OFF)
4546
option(OPENMETA_WITH_DNG_SDK_ADAPTER
4647
"Enable the optional Adobe DNG SDK adapter bridge" OFF)
4748
option(OPENMETA_ENABLE_C2PA_VERIFY "Enable draft C2PA verification scaffold fields" OFF)
@@ -455,6 +456,18 @@ else()
455456
set(OPENMETA_LIB_TARGET openmeta_shared)
456457
endif()
457458

459+
if(OPENMETA_BUILD_BENCHMARKS)
460+
if(NOT OPENMETA_RAPIDFUZZ_FOUND)
461+
message(FATAL_ERROR
462+
"OPENMETA_BUILD_BENCHMARKS requires OPENMETA_ENABLE_RAPIDFUZZ=ON")
463+
endif()
464+
add_executable(openmeta_benchmark_fuzzy_search
465+
tests/benchmarks/metadata_fuzzy_search_benchmark.cc)
466+
openmeta_apply_target_settings(openmeta_benchmark_fuzzy_search)
467+
target_link_libraries(openmeta_benchmark_fuzzy_search
468+
PRIVATE ${OPENMETA_LIB_TARGET})
469+
endif()
470+
458471
if(OPENMETA_BUILD_TOOLS)
459472
add_executable(metaread src/tools/metaread.cc)
460473
openmeta_apply_target_settings(metaread)
@@ -635,6 +648,7 @@ if(OPENMETA_BUILD_WHEEL)
635648
openmeta_append_wheel_config_define(OPENMETA_BUILD_WHEEL OFF)
636649
openmeta_append_wheel_config_define(OPENMETA_BUILD_TOOLS OFF)
637650
openmeta_append_wheel_config_define(OPENMETA_BUILD_TESTS OFF)
651+
openmeta_append_wheel_config_define(OPENMETA_BUILD_BENCHMARKS OFF)
638652
openmeta_append_wheel_config_define(OPENMETA_BUILD_FUZZERS OFF)
639653
openmeta_append_wheel_config_define(OPENMETA_BUILD_FUZZTEST OFF)
640654
openmeta_append_wheel_config_define(OPENMETA_BUILD_DOCS OFF)

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ If you already own the encoder, SDK objects, or output container, follow
6464
- [docs/metadata_support.md](docs/metadata_support.md): metadata support matrix
6565
- [docs/metadata_transfer_plan.md](docs/metadata_transfer_plan.md): transfer
6666
status and roadmap
67+
- [docs/fuzzy_search.md](docs/fuzzy_search.md): optional ranked metadata-name
68+
search contract, quality gates, and benchmark
6769
- [docs/doxygen.md](docs/doxygen.md): API reference
6870
- [SECURITY.md](SECURITY.md): security model and reporting
6971
- [NOTICE.md](NOTICE.md): notices and third-party dependency information

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.4.89
1+
0.4.90

cmake/OpenMetaReport.cmake

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ function(openmeta_print_config_summary)
5959
message(STATUS " OPENMETA_BUILD_SHARED: ${OPENMETA_BUILD_SHARED}")
6060
message(STATUS " OPENMETA_BUILD_TOOLS: ${OPENMETA_BUILD_TOOLS}")
6161
message(STATUS " OPENMETA_BUILD_TESTS: ${OPENMETA_BUILD_TESTS}")
62+
message(STATUS " OPENMETA_BUILD_BENCHMARKS: ${OPENMETA_BUILD_BENCHMARKS}")
6263
message(STATUS " OPENMETA_BUILD_FUZZERS: ${OPENMETA_BUILD_FUZZERS}")
6364
message(STATUS " OPENMETA_BUILD_FUZZTEST: ${OPENMETA_BUILD_FUZZTEST}")
6465
message(STATUS " OPENMETA_FUZZTEST_FUZZING_MODE: ${OPENMETA_FUZZTEST_FUZZING_MODE}")
@@ -82,7 +83,7 @@ function(openmeta_print_config_summary)
8283
openmeta_report_dependency("ZLIB (deflate)" "${OPENMETA_WITH_ZLIB}" "${OPENMETA_ZLIB_FOUND}" "system")
8384
openmeta_report_dependency("Brotli" "${OPENMETA_WITH_BROTLI}" "${OPENMETA_BROTLI_FOUND}" "system")
8485
openmeta_report_dependency("EXPAT (XMP XML)" "${OPENMETA_WITH_EXPAT}" "${OPENMETA_EXPAT_FOUND}" "system")
85-
openmeta_report_dependency("RapidFuzz (metadata search/query)" "${OPENMETA_ENABLE_RAPIDFUZZ}"
86+
openmeta_report_dependency("RapidFuzz (metadata fuzzy search)" "${OPENMETA_ENABLE_RAPIDFUZZ}"
8687
"${OPENMETA_RAPIDFUZZ_FOUND}" "${OPENMETA_RAPIDFUZZ_PROVIDER}")
8788
openmeta_report_dependency("Adobe DNG SDK adapter" "${OPENMETA_WITH_DNG_SDK_ADAPTER}" "${OPENMETA_DNG_SDK_FOUND}" "dng_sdk package")
8889
set(_openmeta_native_needed OFF)

0 commit comments

Comments
 (0)