zvec/python/tests
egolearner 02bfb31cf5
feat: add fts support (#408)
Add BM25-based full-text search with CJK (jieba) tokenization, supporting
  query_string and match_string syntax, phrase queries, boolean operators
  (AND/OR/NOT/MUST), and hybrid retrieval with existing vector search.

  ## Core
  - BitPacked posting format with block-max WAND pruning
  - Tokenizer pipeline: jieba (cut/cut_for_search/hmm/full), whitespace,
    lowercase, with extensible pipeline composition
  - Query parser: boolean operators, phrase queries, field scoping,
    boost, MUST(+) modifier inside OR (ES query_string semantics)
  - AST rewriter: dedup repeated terms with linear boost aggregation,
    flatten same-type composites, canonicalize OR-with-must_not into AND
    wrapper, empty-node propagation, contradiction detection
  - FTS reduce/merge integrated into Optimize compaction
  - Multi-segment score-descending sort
  - Auto-register bundled jieba dict on SDK import

  ## Performance
  - Block-max WAND with cached block_max_info_for (single binary search)
  - AVX2/SSE bitpacked encoding with cross-arch scalar fallback
  - MultiGet for batch posting retrieval and phrase position verification
  - HashSkipList memtable for posting writes
  - PinnableSlice zero-copy reads
  - Filter pushdown into composite iterators (Disjunction/Conjunction/Phrase)
  - Candidate-driven (brute-force) evaluation for selective invert filters
  - Precomputed BM25 IDF weights, cached SIMD dispatch pointers
  - Shortest-list anchor for phrase position matching
  - Single-open per-term posting iterator

  ## Query
  - Tokenize query terms through the same pipeline as indexing
  - EmptyNode for zero-token queries (all stop-words / punctuation)
  - Backslash unescape after lexing in query parser
  - Schema allows collections without vector fields (FTS-only use case)
  - Create/Drop Index validates supported index types
  - FTS fields disallowed in SQL filter expressions

  ## Bindings
  - C API: fts query params, brute-force ratio config
  - Python SDK: FTS search, jieba dict auto-registration

  ## Internals
  - Bypass cppjieba::Jieba to drop KeywordExtractor (~12MB fewer required files)
  - Hide tokenizer pipeline from public header (Pimpl-style FtsState)
  - ListColumnFamilies to avoid double-open on segment load
  - Reorganized fts_column into tokenizer/, posting/, iterator/ subdirs
2026-06-01 15:02:54 +08:00
..
detail fix: sync querier schema after column DDL to fix empty query fields (#429) 2026-05-29 17:36:30 +08:00
test_collection.py feat: migrate multi-vector query and reranker logic to C++ (#405) 2026-05-29 10:10:41 +08:00
test_collection_fts.py feat: add fts support (#408) 2026-06-01 15:02:54 +08:00
test_collection_hnsw_rabitq.py deprecate python VectorQuery (#267) 2026-05-12 14:55:49 +08:00
test_convert.py Initial commit 2025-12-30 11:02:17 +08:00
test_doc.py Initial commit 2025-12-30 11:02:17 +08:00
test_embedding.py feat: enlarge topK limit (#348) 2026-04-17 17:51:07 +08:00
test_fts_query.py feat: add fts support (#408) 2026-06-01 15:02:54 +08:00
test_gil_release.py enhance: release gil lock in collection bindings (#363) 2026-05-14 10:15:49 +08:00
test_hnsw_contiguous_memory.py ut: fix some uts (#394) 2026-05-12 19:04:33 +08:00
test_jieba_default_dict.py feat: add fts support (#408) 2026-06-01 15:02:54 +08:00
test_params.py deprecate python VectorQuery (#267) 2026-05-12 14:55:49 +08:00
test_query_executor.py feat: add fts support (#408) 2026-06-01 15:02:54 +08:00
test_reranker.py feat: migrate multi-vector query and reranker logic to C++ (#405) 2026-05-29 10:10:41 +08:00
test_schema.py fix: fix default m (#20) 2026-01-12 10:22:58 +08:00
test_typing.py Initial commit 2025-12-30 11:02:17 +08:00
test_util.py feat: support ai extension (#88) 2026-02-12 18:33:41 +08:00
test_vamana.py ut: fix some uts (#394) 2026-05-12 19:04:33 +08:00