SOLR về cơ bản là một vùng chứa Apache Tomcat triển khai giao diện REST để truy vấn chỉ mục Apache Lucene. Có, bạn cần có khả năng chạy ứng dụng Java trên máy chủ web của mình. Đây là vấn đề bạn cần giải quyết với nhà cung cấp dịch vụ lưu trữ của mình.
Khách hàng sử dụng ứng dụng web của bạn không cần chạy Java. Ứng dụng PHP của bạn có thể thực hiện truy vấn REST tới dịch vụ SOLR và định dạng kết quả bằng HTML. Máy khách chỉ nhìn thấy đầu ra HTML; nó không bao giờ cần biết rằng dữ liệu đến từ một dịch vụ được triển khai trong Java.
Zend_Search_Lucene
là một triển khai thuần PHP được cho là hoạt động giống hệt với Apache Lucene. Giải pháp Zend thậm chí còn sử dụng một định dạng tệp chỉ mục giống hệt nhau. Vì vậy, chúng phải bằng nhau về mặt lưu trữ.
Tôi đã sử dụng Java Lucene để lập chỉ mục kết xuất dữ liệu StackOverflow (tháng 10 năm 2009). Tôi đã lập chỉ mục 1,5 triệu hàng, bao gồm khoảng 1 gig dữ liệu văn bản. Chỉ số Lucene là 1323 MB, trong khi chỉ mục MySQL FULLTEXT của cùng một dữ liệu chỉ là 466 MB.
Sử dụng SQL LIKE
Các vị từ thay cho bất kỳ giải pháp lập chỉ mục đầy đủ văn bản nào tất nhiên không yêu cầu khoảng trống, vì dù sao nó cũng không thể sử dụng một chỉ mục thông thường. Nhưng trong các thử nghiệm của tôi bằng cách sử dụng LIKE
chậm hơn khoảng 200 lần so với Java Lucene, chậm hơn khoảng 40% so với chỉ mục MySQL FULLTEXT trên cùng một dữ liệu.
Xem bài thuyết trình gần đây của tôi về các giải pháp lập chỉ mục toàn văn bản với MySQL:
http://www.slideshare.net/billkarwin / Practice-full-text-search-with-my-sql
Không có gì ngạc nhiên khi nó không thể sánh được với hiệu suất và khả năng mở rộng của công nghệ Java Lucene. Lợi thế của PHP với tư cách là một ngôn ngữ là tăng hiệu quả phát triển chứ không phải hiệu quả thời gian chạy.
cập nhật: Tôi vừa thử tạo chỉ mục bằng Zend_Search_Lucene
. Tạo chỉ mục với PHP chậm hơn nhiều so với công nghệ Java Lucene, vì vậy tôi chỉ lập chỉ mục 10.000 tài liệu. Quá trình này mất gần 15 phút, tức là mất khoảng 36 giờ để lập chỉ mục toàn bộ bộ sưu tập. So sánh điều này với Java Lucene, trong thử nghiệm của tôi đã lập chỉ mục cho toàn bộ bộ sưu tập 1,5 triệu tài liệu trong vòng chưa đầy 7 phút.
Kích thước của chỉ mục tôi đã tạo bằng Zend_Search_Lucene
là 8,75 MB. Suy rộng ra 150x này, tôi ước tính chỉ mục đầy đủ sẽ là 1312,5 MB. Vì vậy, tôi kết luận rằng Zend_Search_Lucene
tạo một chỉ mục có cùng kích thước với chỉ mục do Java Lucene tạo ra. Điều này đúng như mong đợi.