tôi bắt đầu làm việc trên một dự án mà cần tìm kiếm văn bản đầy đủ trong Ruby tự nhiên đến nỗi tôi bắt đầu với Solr + vết đen mặt trời, nhưng tôi không thể làm cho nó hoạt động. Đó là một nỗi đau khi họ kết nối, sau đó cố gắng tìm hiểu xem liệu tài liệu đã được lập chỉ mục đúng chưa, tìm ra classpath thời gian chạy để tôi có thể thêm các lớp phân tích/tokenizer bổ sung, chỉnh sửa config.xml/schema.xml, v.v. Solr numDocs rõ ràng cho biết họ đã nhận và lập chỉ mục cho họ nhưng tôi không thể nhận được bất kỳ kết quả truy vấn nào. Tôi vừa từ bỏ sau một vài ngày, đó là một địa ngục cấu hình.
ElasticSearch + Tyre là một cách dễ dàng để làm cho nó hoạt động và chạy, tôi đã nhận nó hoạt động trong một giờ. Lucen chỉ là một thư viện tìm kiếm Java, do đó Solr được phát triển thành một ứng dụng tìm kiếm dịch vụ đầy đủ, nhưng Solr vẫn có tất cả bẫy của một ứng dụng web Java điển hình: các cấu hình XML quá phức tạp, lược đồ nặng, các tài liệu XML mong đợi lập chỉ mục, yêu cầu một thùng chứa Java servlet (Jetty hoặc Tomcat), mà chỉ trở thành quá nhiều điểm thất bại đối với tôi.
ElasticSearch cũng dựa trên Lucene, nó có thùng chứa servlet tích hợp nên chỉ cần chạy như daemon, sử dụng JSON + REST API rất thẳng về phía trước để có thể thử nghiệm và phù hợp hơn với Ruby. Đó là schemaless và nó làm việc cho tôi mà không cần chỉnh sửa một tập tin cấu hình. Mọi thứ đều hoạt động tốt đẹp.
Điều tôi thực sự cần là tìm kiếm tiếng Trung và ElasticSearch đã đóng gói SmartChineseAnalyzer của Luecene làm plugin. Bạn không chắc chắn sẽ khó tùy chỉnh chuỗi phân tích/tokenizer như thế nào nếu bạn cần mức tùy chỉnh đó. Docmentation for ElasticSearch và Tyre đều là ưu tiên hàng đầu.
lốp (Ruby thư viện cho ElasticSearch)
https://github.com/karmi/tire
Bạn có thể thử bản demo, nó sẽ cài đặt một searchapp ray, tải về ElasticSearch nhị phân và chạy nó, sau đó bắt đầu Webrick tự động.
$ rails new searchapp -m https://raw.github.com/karmi/tire/master/examples/rails-application-template.rb
Trên hệ thống của tôi nó phàn nàn về việc không có một động cơ Javascript (Rails 3.2 không còn bao gồm thereubyracer đá quý theo mặc định?), Vì vậy tôi đã phải:
$ wget https://raw.github.com/karmi/tire/master/examples/rails-application-template.rb
$ nano rails-application-template.rb
thêm đá quý 'therubyracer' trong nộp (tìm kiếm đá quý 'lốp' và đá quý 'will_paginate'), sau đó ...
$ rails new searchapp -m rails-application-template.rb
đối với phát triển ứng dụng của riêng tôi, tôi chỉ downladed tarball ElasticSearch và chạy ở mặt trước với tham số -f (vì vậy Tôi có thể dễ dàng st op nó bằng tổ hợp phím Ctrl-C)
$ bin/elasticsearch -f
Bạn có thể cài đặt plugin eleasticsearch đầu để có được một giao diện web quản trị
https://github.com/mobz/elasticsearch-head
Ngoài ra một cái gì đó tôi phát hiện ra: nếu bạn có một-to- nhiều mô hình mối quan hệ, Tyre sẽ không giải quyết chúng cho bạn trong kết quả tìm kiếm, nó chỉ trả về một bộ sưu tập bằng phẳng. Các mối quan hệ has_many và depends_to của bạn sẽ chỉ là các id đối tượng trong bộ sưu tập chứ không phải là các đối tượng đầy đủ.
Solr là một lớp dịch vụ ở trên cùng của Lucene. Nó chỉ phụ thuộc vào cách bạn muốn kiến trúc sư. –
Một câu hỏi so sánh thích hợp hơn sẽ là Solr vs ElasticSearch, hoặc Sunspot vs Tyre. –