Releases: versenilvis/fuzzyvn
Releases · versenilvis/fuzzyvn
v0.3.0
Note
Thay đổi
Về hiệu năng
- Thay thế
sort.SliceO(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ọiunicode.IsLower/IsUpper, thay thế bằngswitchtrê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ừ
[]runesang[]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ụngsync.Poolcho các chuỗi có độ dài lên đến 128 bytes
Sử dụngsync.Poolcho 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.gokhi tìm kiếmmain.govà ngược lại - Tích hợp
FileMemoryvớ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
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
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
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
v0.1.5
Full Changelog: v0.1.2...v0.1.5
v0.1.4
Full Changelog: v0.1.2...v0.1.4