Thư viện công cụ tìm kiếm toàn văn tốc độ cao được viết bằng Rust
Giới thiệu
- Tantivy là một thư viện công cụ tìm kiếm có thiết kế tham khảo mạnh mẽ từ Apache Lucene.
- Cũng có Quickwit, một công cụ tìm kiếm phân tán có thể được dùng như lựa chọn thay thế cho Elasticsearch hoặc Apache Solr.
- Tantivy không phải là máy chủ công cụ tìm kiếm, mà là một crate để xây dựng công cụ tìm kiếm.
Benchmark
- Cung cấp benchmark hiệu năng cho nhiều loại truy vấn/bộ sưu tập khác nhau.
- Hiệu năng có thể thay đổi tùy theo tính chất truy vấn và tải hệ thống.
Tính năng chính
- Tìm kiếm toàn văn: hỗ trợ tokenizer cho nhiều ngôn ngữ.
- Hiệu năng nhanh: thời gian khởi động nhanh và hỗ trợ indexing đa luồng.
- Chấm điểm BM25: phương thức chấm điểm giống Lucene.
- Truy vấn ngôn ngữ tự nhiên: có thể xử lý tự nhiên cả các truy vấn phức tạp.
- Truy vấn khoảng và trường facet phân cấp: hỗ trợ nhiều kiểu dữ liệu khác nhau.
- Kho lưu trữ tài liệu nén: hỗ trợ nhiều phương thức nén như LZ4, Zstd.
- Trường JSON và bộ thu thập tổng hợp: hỗ trợ histogram, bucket phạm vi, giá trị trung bình và các metric thống kê.
Không thuộc phạm vi
- Tìm kiếm phân tán nằm ngoài phạm vi của Tantivy. Nếu cần tìm kiếm phân tán, hãy tham khảo Quickwit.
Bắt đầu
- Tantivy hoạt động trên Rust ổn định và hỗ trợ Linux, macOS, Windows.
- tantivy-cli: cung cấp giao diện dòng lệnh giúp dễ dàng tạo công cụ tìm kiếm, indexing và tìm kiếm.
- Tài liệu tham khảo: cung cấp tài liệu tham khảo cho phiên bản phát hành mới nhất.
Cách hỗ trợ dự án
- Sử dụng Tantivy và chia sẻ trải nghiệm.
- Gửi báo cáo lỗi.
- Viết bài blog.
- Hỗ trợ tài liệu hóa.
- Đóng góp mã nguồn.
Đóng góp mã nguồn
- Sử dụng quy trình GitHub Pull Request.
- Khi đóng góp, hãy tham chiếu ticket GitHub và viết thông điệp commit đầy đủ.
FAQ
- Hỗ trợ ngôn ngữ khác: cung cấp nhiều language binding như Python, Ruby.
- Ví dụ sử dụng: được dùng trong nhiều dự án như seshat, tantiny, lnx.
- So sánh tốc độ: nhanh hơn Lucene khoảng 2 lần.
- Hỗ trợ incremental indexing: có.
- Chỉnh sửa tài liệu: tài liệu là bất biến. Cần xóa rồi lập chỉ mục lại.
- Thời điểm có thể tìm kiếm trong khi indexing: có thể tìm kiếm sau khi gọi
commit.
Ý kiến của GN⁺
- Hiệu năng nhanh dựa trên Rust: đây là công cụ tìm kiếm nhanh tận dụng hiệu năng và tính an toàn của Rust, phù hợp với các dự án coi trọng hiệu năng.
- Hỗ trợ nhiều ngôn ngữ: có thể dùng trong nhiều môi trường nhờ nhiều language binding như Python, Ruby.
- Incremental indexing: tính năng hữu ích khi xử lý dữ liệu quy mô lớn.
- Tính bất biến của tài liệu: giúp duy trì tính nhất quán dữ liệu, nhưng cần lập chỉ mục lại khi sửa tài liệu.
- Kết hợp với Quickwit: nếu cần tìm kiếm phân tán, có thể dùng cùng Quickwit.
1 bình luận
Ý kiến trên Hacker News
Chia sẻ trải nghiệm dự án: Đã dùng thư viện này để xây dựng lại <a href="https://progscrape.com" rel="nofollow">progscrape.com</a> nhằm thay thế một codebase AppEngine Python2 cũ. Thư viện rất nhanh, có thể lập chỉ mục 1M câu chuyện chỉ trong vài giây trên Raspberry Pi. Mức sử dụng CPU rất thấp và hiệu năng tìm kiếm cũng rất ấn tượng.
ParadeDB và Tantivy: Gần đây đã phát hiện Tantivy trong ParadeDB (một tiện ích mở rộng của Postgres). Nó được dùng để mở rộng Postgres cho các tác vụ phân tích hiệu năng cao.
Quickwit và Clickhouse: Trong một dự án tìm kiếm đa ngôn ngữ, hiệu năng kết hợp giữa Quickwit và Clickhouse là rất tốt. Đặc biệt hữu ích cho tìm kiếm tiếng Trung, tiếng Nhật và tiếng Hàn.
Giới hạn của
to_tsvector:to_tsvectorcủa PostgreSQL không thực sự phù hợp với một số trường hợp sử dụng cụ thể. Chúc Tantivy thành công.Triển khai Quickwit trong môi trường production: Đã dùng Quickwit để lập chỉ mục hàng chục tỷ đối tượng, và tốc độ lập chỉ mục cùng độ trễ truy vấn đều có tính cạnh tranh. Việc tách biệt compute và storage đặc biệt hữu ích.
Hiệu năng của Tantivy: Rất ấn tượng với hiệu năng của Tantivy và nỗ lực của những người sáng lập. Tin rằng đội ngũ sẽ thành công.
Tìm kiếm trigram của Etsy/Hound: Từng có kinh nghiệm dùng chỉ mục tìm kiếm trigram bằng ngôn ngữ Go, dựa trên kỹ thuật so khớp biểu thức chính quy của Russ Cox.
Lý do chọn Tantivy: Đã chọn Tantivy sau khi thất vọng với mức tiêu thụ tài nguyên của Elasticsearch. Muốn thực hiện dự án bằng Rust, và Tantivy có hiệu năng cùng tài liệu rất tốt.
Vấn đề nâng cấp của Lucene và Solr: Hỗ trợ nâng cấp chỉ mục của Lucene và Solr còn thiếu. Với nhiều dự án lớn, việc lập chỉ mục lại là rất tốn kém và đôi khi không khả thi.
Giới hạn khi thêm/xóa trường: Trong Tantivy, không thể thêm hoặc xóa trường; phải lập chỉ mục lại toàn bộ dữ liệu sang một chỉ mục tìm kiếm khác.
Phương án thay thế Meilisearch: Do vấn đề telemetry của Meilisearch, đã tìm đến Tantivy như một lựa chọn thay thế. Cấu hình có vẻ đơn giản.
LanceDb và Tantivy: Sản phẩm cơ sở dữ liệu vector LanceDb sử dụng Tantivy để cung cấp tính năng tìm kiếm toàn văn. Hiện tại mới chỉ khả dụng qua Python binding, nhưng đang có kế hoạch triển khai Rust binding.