Từ điển sẽ thực hiện công việc. Tuy nhiên, nếu bạn đang thực hiện các kết quả khớp từng phần nhanh chóng (ví dụ: tìm kiếm dưới dạng loại người dùng), bạn có thể nhận được hiệu suất tốt hơn bằng cách tạo nhiều khóa trỏ đến cùng một mục. Ví dụ: từ "Apple" có thể được đặt với "Ap", "App", "Appl" và "Apple".
Tôi đã sử dụng phương pháp này trên một số lượng bản ghi tương tự với kết quả rất tốt. Tôi đã biến các nguồn 10K của mình thành khoảng 50K khóa duy nhất. Mỗi mục trong số các mục từ điển này trỏ đến danh sách chứa tham chiếu đến tất cả các kết quả phù hợp cho cụm từ đó. Sau đó bạn có thể tìm kiếm danh sách nhỏ hơn nhiều này hiệu quả hơn. Mặc dù số lượng lớn các danh sách này tạo ra, nhưng bộ nhớ là khá hợp lý.
Bạn cũng có thể tạo khóa riêng nếu muốn chuyển hướng lỗi chính tả phổ biến hoặc trỏ đến các mục có liên quan. Điều này cũng loại bỏ hầu hết các vấn đề với các khóa duy nhất bởi vì mỗi điểm quan trọng vào một danh sách. Một mục có thể được phân loại theo từng từ trong tên của nó; điều này cực kỳ hữu ích nếu bạn có tên sản phẩm dài với nhiều từ trong đó. Khi phân loại các mục của bạn, mỗi từ trong tên có thể được ánh xạ tới một hoặc nhiều khóa.
Tôi cũng nên chỉ ra rằng việc xây dựng và phân loại các hạng mục 10K sẽ không mất nhiều thời gian nếu được thực hiện đúng (vài trăm mili giây là hợp lý). Kết quả có thể được lưu trong bộ nhớ cache miễn là bạn muốn sử dụng Application
, Cache
hoặc các thành viên tĩnh.
Để tóm tắt, cấu trúc kết quả là Dictionary<string, List<T>>
trong đó chuỗi ngắn (2-6 ký tự hoạt động tốt) nhưng khóa duy nhất. Mỗi điểm chính đến một mục List<T>
(hoặc bộ sưu tập khác nếu bạn nghiêng) của các mục phù hợp với khóa đó. Khi tìm kiếm được thực hiện, bạn xác định vị trí khóa khớp với cụm từ do người dùng cung cấp. Tùy thuộc vào độ dài của khóa, bạn có thể cắt bớt tìm kiếm của người dùng theo độ dài khóa tối đa của bạn. Sau khi định vị bộ sưu tập con đúng, bạn sau đó tìm kiếm bộ sưu tập đó cho một kết hợp hoàn chỉnh hoặc một phần bằng cách sử dụng bất kỳ phương pháp nào bạn muốn.
Cuối cùng, bạn có thể tạo cấu trúc nhẹ cho mỗi mục trong danh sách để bạn có thể lưu trữ thông tin bổ sung về mục đó. Ví dụ: bạn có thể tạo một lớp Sản phẩm nhỏ lưu trữ tên, giá, bộ phận và mức độ phổ biến của sản phẩm. Điều này có thể giúp bạn tinh chỉnh kết quả bạn hiển thị cho người dùng.
Tất cả trong tất cả, bạn có thể thực hiện tìm kiếm thông minh, chi tiết, mờ trong thời gian thực.
Cấu trúc nói trên phải cung cấp chức năng tương đương gần với trie.
Vui lòng không đặt C# vào tiêu đề. Đó là những gì các thẻ cho. – Amy
Không phải bộ sưu tập: Bạn có thể sử dụng SQLLite để lưu trữ dữ liệu và truy cập dữ liệu đó. –