Điều này có thể là một vấn đề khiến tôi mất nhiều thời gian hơn để suy nghĩ cách làm đúng, suy nghĩ theo cách tối ưu nhất để làm.Cách tốt nhất để tạo ra một hệ thống "hashtag"
Tôi có bảng "Nội dung" và cần thêm tùy chọn để liên kết nhiều "thẻ bắt đầu bằng #" hoặc "thẻ" hoặc "từ khóa" cho nội dung, ví dụ: nội dung như "khoai tây chiên với sốt cà chua" có "keys": "potato", "ketchup" và "fried".
Và khi tôi thực hiện tìm kiếm theo một từ, ví dụ "khoai tây", tôi cần hiển thị nội dung có trong đó gắn thẻ từ này.
Câu hỏi đặt ra là cấu trúc tốt nhất của nó để làm điều này, suy nghĩ về tốc độ kết quả vì bảng nội dung là một MIS MyISAM hơn 30 hàng Millon.
Tôi nghĩ rằng trong việc này:
Hãy thêm 2 bảng, "contents_hashtags" (id(INT11), content_id(INT11), hashtag_id(INT11))
và "hashtags" (id(INT11), hashtag(VARCHAR(40)))
2 bảng trong InnoDB
Khi người dùng tạo/sửa đổi nội dung bảng, tôi tìm kiếm trong thẻ hashtags và nhận ID, nếu thẻ bắt đầu bằng # không tồn tại, hãy tạo thẻ đó trong thẻ bắt đầu bằng #, nếu có, hãy lấy ID, sử dụng ID này tạo các chèn trong bảng content_hashtas nội dung liên kết < -contents_hashtas-> hashtahs
Trong tìm kiếm, thực hiện JOINS (LEFT/RIGHT/INNER dude ..) và thực hiện tìm kiếm bằng LIKE ?? theo chính xác (hashtag = "XXX") hoặc TEXT TEXT FULL?
Phương pháp này có chính xác/nhanh không? Tôi không biết làm thế nào chạy này với một số lượng hàng lớn và lưu lượng lớn ..
gì các phương pháp là để nhanh chóng tìm kiếm? phương pháp 3 bảng hoặc 2 bảng? Trong phương thức 3 bảng là một mối quan hệ trực tiếp bằng JOIN, nhưng trong phương thức 2 bảng, thẻ bắt đầu bằng # được "nhân đôi" cho nội dung (vì id + hashtag cant repeat). Nếu tôi thực hiện tìm kiếm ví dụ: content.active = 1 AND (contents.name = 'xxx' OR (Contags.hashtag = 'XXX' và Content.id = Contags.content_id)) – Zenth
Được bỏ phiếu cho "Cách khác, đặt Hashtags Name và ContentId là khóa duy nhất". Không cần 3 bảng 2 là đủ. – DeepBlue