Câu hỏi này đòi hỏi một câu trả lời rất rộng cần được trả lời trên mọi phương diện. Có rất nhiều đặc điểm cụ thể có thể làm cho một hệ thống vượt trội hơn một hệ thống khác trong một trường hợp sử dụng đặc biệt, nhưng tôi muốn đề cập đến những điều cơ bản ở đây.
Tôi sẽ xử lý hoàn toàn Solr như một ví dụ cho một số công cụ tìm kiếm hoạt động gần giống như vậy.
Tôi muốn bắt đầu với một số sự kiện khó:
-
Bạn không thể dựa vào Solr / Lucene như một cơ sở dữ liệu an toàn. Có một danh sách các sự kiện tại sao nhưng chúng hầu hết bao gồm thiếu các tùy chọn khôi phục, thiếu các giao dịch axit, các biến chứng có thể xảy ra, v.v. Nếu bạn quyết định sử dụng solr, bạn cần điền chỉ mục của mình từ một nguồn khác như bảng SQL. Trên thực tế, solr hoàn hảo để lưu trữ các tài liệu bao gồm dữ liệu từ một số bảng và quan hệ, nếu không sẽ yêu cầu các phép nối phức tạp được xây dựng.
-
Solr / Lucene cung cấp các chức năng phân tích văn bản / viết gốc / chấm điểm tìm kiếm toàn văn / làm mờ. Những điều bạn không thể làm với MySQL. Trên thực tế, tìm kiếm toàn văn trong MySql chỉ giới hạn trong MyIsam và việc chấm điểm là rất nhỏ và hạn chế. Trọng số các trường, tăng cường tài liệu trên một số chỉ số nhất định, cho điểm kết quả dựa trên độ gần của cụm từ, đối sánh độ chính xác, v.v. là công việc rất khó gần như không thể.
-
Trong Solr / Lucene, bạn có tài liệu. Bạn không thể thực sự lưu trữ các quan hệ và quy trình. Tất nhiên, bạn có thể lập chỉ mục các khóa của các tài liệu khác bên trong trường nhiều giá trị của tài liệu nào đó, do đó, bằng cách này, bạn thực sự có thể lưu trữ các quan hệ 1:n và thực hiện theo cả hai cách để lấy n:n, nhưng dữ liệu của nó bị chi phí. Đừng hiểu lầm tôi, nó hoàn hảo và hiệu quả cho nhiều mục đích (ví dụ:đối với một số danh mục sản phẩm nơi bạn muốn lưu trữ các nhà phân phối sản phẩm và bạn chỉ muốn tìm kiếm các bộ phận có sẵn tại một số nhà phân phối nhất định hoặc thứ gì đó). Nhưng bạn đạt đến cuối khả năng với HAS / HAS NOT. Bạn có thể không làm điều gì đó như "nhận được tất cả các sản phẩm có sẵn ít nhất 3 nhà phân phối".
-
Solr / Lucene có các tính năng khía cạnh rất tốt và phân tích tìm kiếm bài đăng. Ví dụ:Sau một tìm kiếm rất rộng có 40000 lần truy cập, bạn có thể hiển thị rằng bạn sẽ chỉ nhận được 3 lần truy cập nếu bạn đã tinh chỉnh tìm kiếm của mình để kết hợp giữa trường này giá trị này và trường đó giá trị đó. Nội dung cần truy vấn bổ sung trong MySQL được thực hiện một cách hiệu quả và thuận tiện.
Vì vậy, chúng ta hãy tổng hợp
-
Sức mạnh của Lucene là tìm kiếm / phân tích văn bản. Nó cũng rất nhanh vì cấu trúc chỉ mục ngược lại. Bạn thực sự có thể thực hiện nhiều xử lý bài đăng và đáp ứng các nhu cầu khác. Thay vào đó, nó định hướng tài liệu và không có "truy vấn đồ thị" như các cửa hàng ba làm với SPARQL, các quan hệ N:M cơ bản có thể được lưu trữ và truy vấn. Nếu ứng dụng của bạn tập trung vào tìm kiếm văn bản, bạn chắc chắn nên sử dụng Solr / Lucene nếu bạn không có lý do chính đáng, chẳng hạn như các truy vấn bộ lọc phạm vi đa chiều, rất phức tạp, để làm theo cách khác.
-
Nếu bạn không có tìm kiếm văn bản mà là một thứ gì đó mà bạn có thể trỏ và nhấp vào thứ gì đó nhưng không nhập văn bản, thì cơ sở dữ liệu quan hệ cũ tốt có lẽ là cách tốt hơn để sử dụng.