Câu trả lời ngắn gọn là vì truy xuất văn bản hầu như không có gì giống với cách cơ sở dữ liệu truyền thống được thiết kế và sử dụng. Một người nào đó là một át chủ bài trong việc tạo / sử dụng RDBMS giống như một con cừu để giết thịt khi họ tiếp cận truy xuất văn bản lần đầu tiên.
(Xin lỗi vì câu trả lời dài, nhưng hôm nay tôi bị ốm và tôi không có gì khác để làm.)
Những điều sau đây có thể dễ dàng xuất hiện dưới TL; DR, nhưng nếu bạn có thời gian và sự quan tâm, thì phần tiếp theo là một phần của câu trả lời dài hơn. Lưu ý: Tôi đang nói đến việc đã triển khai một hệ thống truy xuất thông tin thương mại bắt đầu từ năm 1986. Chúng tôi đã thành công về mặt kỹ thuật, nhưng là một thị trường thất bại.
Thực hiện IR (Truy xuất thông tin) đúng cách yêu cầu bạn bắt đầu bằng cách suy nghĩ về những gì bạn đang tìm kiếm và cách bạn sẽ tìm thấy nó bằng cơ chế truy vấn của mình. Điều này nghe có vẻ dễ dàng, nhưng nó là bất cứ điều gì nhưng dễ dàng. Đây chỉ là một số trong những điều bạn sẽ phải quyết định trước khi bạn bắt đầu quét tài liệu (hoặc các trường) của mình.
- Có vấn đề gì không? DoD có giống như tơ hồng không? Làm thế nào về "ngọn lửa" và "FLAME" (một loại nước hoa dựa trên Burger King Whopper (vâng, thực sự)).
- Những loại mã thông báo nào bạn sẽ lập chỉ mục? Bạn rõ ràng muốn lập chỉ mục "cha". Bạn có thể muốn lập chỉ mục "Daddy123". Bạn có muốn lập chỉ mục "123" không? "12.3"? "192.168.1.1"?
- Làm thế nào để bạn đối phó với những thứ như gạch nối? Một ví dụ hơi lỗi thời là "cơ sở dữ liệu", "cơ sở dữ liệu" và "cơ sở dữ liệu", tất cả đều được sử dụng đồng thời vào năm 1986.
- Nếu ngôn ngữ truy vấn của bạn hỗ trợ khái niệm "Tìm A trong cùng một câu với B", làm thế nào để bạn xác định ngắt câu? Mặc du '?' và '!' là đủ dễ dàng, những '. là một bitch. Hãy suy nghĩ về những thứ như "Mr.", "2.", "vv", v.v.
- Bạn sẽ hỗ trợ xuất phát? Nếu vậy, bạn sẽ cẩn thận đến mức nào để không vô tình thay đổi POS (Phần của bài phát biểu)? Ví dụ: "mèo" có thể bắt nguồn từ "mèo", nhưng "rèm" có thể hoặc không bắt nguồn từ "mù". Nếu đó là một động từ ("Anh ấy làm tôi mù") thì bạn có thể bắt nguồn, nhưng nếu đó là một danh từ ("Tôi thích rèm của bạn) thì bạn không thể (hoặc ít nhất là không nên). là một đầm lầy của Đệ nhất.
- Những ngôn ngữ bạn sẽ hỗ trợ? Những gì hoạt động bằng tiếng Anh có thể thất bại thời gian lớn bằng tiếng Pháp hoặc tiếng Đức, mặc dù thật kỳ lạ, nó sẽ có xu hướng hoạt động tốt cho tiếng Nhật trong đại diện Hepburn Romanji .
Và danh sách cứ tiếp tục dài.
Sau đó, chúng tôi phải suy nghĩ về ngôn ngữ truy vấn của chúng tôi. Nó có vẻ rằng nếu tất cả các bạn sẽ hỗ trợ rất đơn giản Boolean sau đó nó sẽ được dễ dàng, nhưng một trong những điều đó là khá nhiều phổ biến thoả thuận là tinh khiết Boolean hút cho văn bản. Ví dụ, bạn sẽ cần các toán tử bổ sung để chỉ định thứ tự và khoảng cách, và cậu bé, ồ, cậu bé làm điều đó khiến cuộc sống trở nên phức tạp hơn. Bạn cũng cần biết bạn đang ở phần nào - tiêu đề, tiêu đề, nội dung, v.v. - dẫn đến tất cả các loại phân tích cú pháp cụ thể của bộ sưu tập. Nhưng bây giờ không còn đủ để chỉ có một danh sách các mã thông báo xuất hiện trong tài liệu, bạn phải biết nơitrong tài liệu họ xảy ra. Điều này dẫn đến một bộ địa chỉ của (docID, partID, para-in-part, câu-in-para, word-in-ver). Lưu trữ và tìm kiếm hiệu quả thông tin này có thể có được sở trường cho một bộ sưu tập phi đồ chơi.
Sau đó là cấu trúc thực tế của cửa hàng dữ liệu của bạn. Các hệ thống văn bản thường được thực hiện dưới dạng "đảo ngược hoàn toàn" các tài liệu. DB trung bình có bao nhiêu chỉ số? 10? 50? 500? Trong IR, không có gì lạ khi có 5.000.000 chỉ mục trở lên , mỗi chỉ số cho một mã thông báo riêng biệt. Và bất kỳ mã thông báo cụ thể nào cũng có thể có 1 phiên bản (ví dụ: "narfle" hoặc "garthok") hoặc 10.000.000 phiên bản (ví dụ: "the"). Điều này có nghĩa là toàn bộ phương pháp tạo và cập nhật các chỉ mục của bạn phải nhanh như chớp hoặc bạn sẽ chìm vào đầm lầy. Và bạn vẫn còn nhiều vấn đề khác mà DB truyền thống mắc phải: quản lý không gian đĩa, phục hồi sự cố, ảnh chụp nhanh mạch lạc từ một hệ thống đang chạy, v.v., v.v.
Cuối cùng là kết quả xếp hạng. Một kết quả không được đặt ra từ một truy vấn Boolean đối với một bộ sưu tập lớn là vô ích đối với con người. Nó có thể hữu ích cho một chương trình, nhưng đó không phải là điều tôi đang giải quyết. Mặc dù hệ thống của chúng tôi đã triển khai Boolean, điểm bán hàng của chúng tôi là chúng tôi là hệ thống thương mại đầu tiên hỗ trợ tìm kiếm sự tương tự , dựa trên Hệ số Cosine . Toán học và logic của loại tìm kiếm này (về cơ bản là một sản phẩm chấm được chuẩn hóa của vectơ truy vấn so với hàng triệu vectơ tài liệu) yêu cầu các cách tiếp cận khác nhau để biểu diễn và lưu trữ dữ liệu so với Boolean - chắc chắn không phải là thứ có sẵn trong DB trung bình của bạn.
Tất cả điều này (và hơn thế nữa) là lý do tại sao "truy xuất văn bản" và "cơ sở dữ liệu" gần như không thuộc cùng một câu. Tôi nghĩ rằng bạn nên chọn một cơ sở dữ liệu tốt cho nhu cầu "bình thường" của mình, sau đó sử dụng hệ thống IR bên ngoài để lập chỉ mục / tìm kiếm "tài liệu" trong DB chính của bạn.