Skip to content

Releases: versenilvis/fuzzyvn

v0.3.0

05 Apr 20:25

Choose a tag to compare

Note

Thay đổi

Về hiệu năng

  • Thay thế sort.Slice O(NlogN) bằng giải thuật sắp xếp một phần dùng Min-heap O(Nlog 20), giúp giảm chi phí sắp xếp xuống ~10 lần trên các tập kết quả lớn
  • Nâng cấp tìm kiếm có bộ lọc từ đơn luồng lên đa nhân (parallel), đạt hiệu suất tương đương với FuzzyFindParallel
  • Bỏ qua hoàn toàn bước sắp xếp lại khi không có các chỉ số tăng điểm về Memory/Context nào đang hoạt động
    Loại bỏ các lệnh gọi unicode.IsLower/IsUpper, thay thế bằng switch trên byte để nhận diện word boundary
  • Chuyển đổi các thao tác tìm kiếm cốt lõi từ []rune sang []byte, giảm chu kỳ xử lý của CPU và áp lực lên bộ nhớ
    Sử dụng thuật toán Jaro-Winkler hiệu suất cao sử dụng sync.Pool cho các chuỗi có độ dài lên đến 128 bytes
    Sử dụng sync.Pool cho các buffer điểm số để loại bỏ tình trạng tranh chấp dữ liệu trong khi tìm kiếm đồng thời

Hệ thống tính điểm mới

  • Hệ thống tính điểm 4 tầng:
    • Tầng 1 (+1.000.000): Khớp tiền tố hoàn hảo (truy vấn nằm ngay đầu tên file).
    • Tầng 2 (+500.000): Khớp chứa ký tự (tất cả ký tự trong truy vấn đều xuất hiện trong tên file ngắn, giúp bắt được lỗi đảo ký tự như main -> mian).
    • Tầng 3 (+200%): Khớp một phần tên file (khớp ít nhất 1 ký tự trong phần tên file).
    • Tầng 4 (phạt điểm): Chỉ khớp trong đường dẫn (bị trừ điểm dựa trên độ dài đường dẫn).
  • Xử lý đảo ký tự: Đếm tần suất ký tự không theo thứ tự trong tên file giúp tìm thấy mian.go khi tìm kiếm main.go và ngược lại
  • Tích hợp FileMemory với cơ chế giảm điểm theo thời gian để ưu tiên các file thường xuyên được chọn

Filtering

  • Bitset index có khả năng chịu lỗi typo (cho phép thiếu 1-2 ký tự đối với các truy vấn dài)
  • Các ký tự xuất hiện trong 85& số file sẽ bị loại khỏi chỉ mục để giảm nhiễu
  • DeleteFile đánh dấu các file đã xoá vào Bin thay vì build lại

Full Changelog: v0.2.0...v0.3.0

v0.2.0

24 Feb 04:11
faa3a05

Choose a tag to compare

Note

Thay đổi:

  • Bổ sung Thưởng Khớp Hoàn Toàn Tên File (+1000 điểm) để ưu tiên tên file thay vì đường dẫn.
  • Bổ sung Phạt Khoảng Cách để giảm hạng nhẹ các file nằm sâu trong nhiều lớp thư mục.
  • Giới hạn chạy tính toán Điểm Từ (Word Bonus) chỉ ở top 30 kết quả để tăng tốc.
  • Thay thế hoàn toàn map (map[int]int) bằng flat array pre-allocate []int tracking O(1).
  • Bỏ sync.Pool, gán array tĩnh [64]int để ép compiler cấp phát ngăn xếp (stack-allocate), giảm cấp phát LevenshteinRatio về 0.
  • Giảm cấp phát cấp Normalize() bằng slice []byte trực tiếp thay vì strings.Builder.
  • Xóa ép kiểu string sang []rune trong các vòng lặp hot thay bằng con trỏ hàm containsRunes zero-allocation.
  • Nâng lên Go 1.26 để giảm thiểu chi phí bộ nhớ từ Green Tea Garbage Collector.
  • Thay thế toàn bộ sort.Slice bằng hàm sort siêu tốc pdqsort (slices.SortFunc).
  • Thêm gợi ý tắt check tràn mảng BCE (Bounds Check Elimination) để loại bỏ kiểm tra độ an toàn dư thừa.
  • Đổi toàn bộ test từ vòng loop b.N truyền thống sang b.Loop() để tối ưu với trình dịch Go 1.26.

Full Changelog: v0.1.7...v0.2.0

v0.1.8

14 Dec 12:35
8d18303

Choose a tag to compare

Thay đổi:

  • Tối ưu hàm Normalize
  • Chuẩn hóa nhanh hơn, index file nhanh hơn cũng như tốn ít ram cho việc khởi tạo hơn

BenchmarkNormalize 15,714 ns/op 1,649 ns/op -> Nhanh gấp ~9.5 lần
BenchmarkNewSearcher 4,451,109 ns/op 208,542 ns/op -> Nhanh gấp ~21 lần
Allocations 39 allocs/op 9 allocs/op -> Giảm 4 lần RAM

Full Changelog: v0.1.7...v0.1.8

v0.1.7

14 Dec 12:16

Choose a tag to compare

Hot fix

  • Fix lỗi không tìm được tên file ngắn (ví dụ như main.go)

Lưu ý

  • Vì đã áp dụng Lenvenshtein trên mọi file, nên tốc độ sẽ bị chậm đi

Full Changelog: v0.1.6...v0.1.7

v0.1.6

11 Dec 05:53
3757e48

Choose a tag to compare

Tìm và tối ưu allocation

Dùng 100k file thật thay vì đọc từ 1 file text (walk dir)

100k files:
Từ 29ms -> 9ms
Từ 52MB -> 0.5MB

Xem full: #1

Full Changelog: v0.1.5...v0.1.6

v0.1.5

09 Dec 10:31

Choose a tag to compare

Full Changelog: v0.1.2...v0.1.5

v0.1.4

09 Dec 10:20
2a82b4d

Choose a tag to compare

Full Changelog: v0.1.2...v0.1.4