2012-02-07 56 views
12

Chúng tôi đang cố gắng phát triển một chiến lược sử dụng elasticsearch để tìm kiếm toàn văn bản trên cá thể mongodb của chúng tôi. Có vẻ như mọi khóa mà chúng ta muốn sử dụng làm bộ lọc phải được bao gồm trong chỉ mục elastics. Có khả năng chúng tôi có thể muốn sử dụng mọi khóa trong Mongo làm bộ lọc - tức là tìm kiếm toàn văn trên mô tả, lọc theo ngày và số điện thoại. Có ai có bất kỳ kinh nghiệm thực tế nào về việc thêm toàn văn vào mongo mà họ có thể chia sẻ không?mongodb chiến lược tìm kiếm toàn văn

Có lẽ chúng ta chỉ có thể sử dụng elasticsearch làm db?

Trả lời

14

Tôi không thấy bất kỳ lý do nào để sử dụng ElasticSearch kết hợp với MongoDb, chỉ cần sử dụng ElasticSearch làm lưu trữ tài liệu riêng biệt cho các tài liệu, phải được tìm kiếm. Và có, bạn thậm chí có thể là toàn bộ db. Tất nhiên nó phụ thuộc vào mô hình miền của bạn và các yếu tố khác.

Nếu bạn không cần bắt nguồn, tìm kiếm mờ, tìm kiếm ký tự đại diện phức tạp, bạn có thể thực hiện tìm kiếm với mongoDb. Khi tài liệu mới được chèn vào, hãy chia nhỏ nó thành các từ trong chữ thường, và thêm vào mảng "từ" ví dụ. Sau đó, bạn có thể thực hiện yêu cầu tìm kiếm đối với mảng này với regex. Không phải bạn có thể sử dụng tùy chọn I (bỏ qua trường hợp) trong regex này và bạn chỉ có thể tìm kiếm một ký tự đại diện LIKE% (hoặc không có ký tự đại diện), nếu không tìm kiếm sẽ không sử dụng chỉ mục mongoDb.

Một lựa chọn hơn - bạn có thể thử để tìm river cho MongoDB

Một lựa chọn khác - là sử dụng Lucene nếu bạn đang sử dụng Java. Có lẽ bạn sẽ có thể mở rộng lớp Directory, theo cách đó, Lucene sẽ lưu trữ chỉ mục trong MongoDb thay vì hệ thống tệp hoặc RAM. Tôi đã không thực hiện bất kỳ nghiên cứu nào trong lĩnh vực này, nhưng tôi nghĩ rằng có thể

+0

Cảm ơn Umar, chúng tôi sẽ cung cấp cho bạn một approcah thử – stew

+0

Trong khi điều này là một lựa chọn, có đến một điểm mà trọng lượng của dữ liệu là đủ lớn để làm cho regex tìm kiếm một sự lựa chọn không hiệu quả. Đó là trên thực tế tại sao các chỉ mục tìm kiếm tồn tại. Họ bổ sung và tăng cường lưu trữ liên tục cho mục đích rõ ràng là giữ các hoạt động tìm kiếm tốn kém khỏi cơ sở dữ liệu. –

+0

Ngay cả với regex mongodDb có thể sử dụng chỉ mục như tôi đã đề cập trong câu trả lời, nó phụ thuộc vào loại regex – Anton

9

Tôi đã thử nghiệm tìm kiếm văn bản đầy đủ trong MongoDB bằng cách tách các từ trong chuỗi như @Umar đề xuất. Thành thật mà nói, một cơ sở dữ liệu của nó và không phải là một công cụ tìm kiếm vì vậy tôi sẽ sử dụng Mongo để lưu trữ liên tục và ElasticSearch cho phần công cụ tìm kiếm của nó. Như một vấn đề của thực tế, tôi sẽ dính với một cái gì đó như Postgresql để lưu trữ lâu dài và sau đó đẩy dữ liệu bạn muốn tìm kiếm ra công cụ tìm kiếm. http://gdal.org/ogr/drv_elasticsearch.html là một trình điều khiển cho phép bạn nhanh chóng xuất dữ liệu của bạn từ một RDBMS sang ElasticSearch. Dữ liệu này không phải là không gian địa lý để sử dụng nó GDAL miễn là chúng là một cách để kết nối với nguồn đầu vào.

Adam

Các vấn đề liên quan