Lông-mongodb-mờ-tìm kiếm

Giả sử bạn đang chạy MongoDB. Tuyệt vời. Bây giờ bạn có thể tìm thấy kết quả khớp chính xác cho tất cả các truy vấn mà bạn có thể ném vào cơ sở dữ liệu. Bây giờ, hãy tưởng tượng rằng bạn cũng đang xây dựng tính năng tìm kiếm văn bản trong ứng dụng của mình. Nó phải loại bỏ các từ khỏi tiếng ồn sai chính tả và kết quả cũng có thể khớp với các từ đồng nghĩa. Đối với nhiệm vụ khó khăn này, bạn đã chọn sử dụng một trong các dự án dựa trên Lucene, Elaticsearch hoặc Solr. Nhưng bây giờ bạn gặp một vấn đề – Công cụ này sẽ tìm kiếm các tài liệu của bạn được lưu trữ trong MongoDB như thế nào?

Mongo Connector lấp đầy khoảng cách giữa MongoDB và một số công cụ tìm kiếm tốt nhất hiện có, chẳng hạn như Elaticsearch và Solr. Nó không chỉ có khả năng xuất dữ liệu từ bộ bản sao MongoDB của bạn hoặc cụm phân đoạn sang các hệ thống này mà còn giữ cho dữ liệu của bạn nhất quán giữa các hệ thống này. khi bạn chèn, cập nhật và xóa tài liệu trong MongoDB, những thay đổi này sẽ sớm được phản ánh ở phía bên kia thông qua Trình kết nối Mongo. Bạn thậm chí có thể sử dụng Trình kết nối Mongo để truyền các thay đổi được thực hiện trên một bản sao được đặt chính sang một bản sao khác, do đó mô phỏng một cụm “đa bản chính”

Khi Mongo Connector được phát hành lần đầu tiên vào tháng 8 năm 2012, nó rất đơn giản về khả năng và thiếu khả năng chịu lỗi. Tôi đã làm việc trên Mongo Connector từ tháng 11 năm 2013 với sự trợ giúp của nhóm MongoDB Python và tôi rất vui khi nói rằng Mongo Connector đã đi một chặng đường dài về các tính năng mà nó cung cấp và (đặc biệt là) tính ổn định. Bài đăng này sẽ giới thiệu một số tính năng mới này và đưa ra ví dụ về cách sao chép các hoạt động từ MongoDB sang Elaticsearch, một công cụ tìm kiếm nguồn mở, sử dụng Mongo Connector. Ở cuối bài đăng này, chúng tôi sẽ có thể thực hiện các truy vấn văn bản khớp mờ với luồng dữ liệu vào Elaticsearch

Lấy tập dữ liệu của chúng tôi

Đối với bài đăng này, chúng tôi sẽ lấy các bài đăng từ trang web tổng hợp liên kết phổ biến, Reddit. Gần đây, chúng tôi đã thêm mã hóa an toàn cho các loại dữ liệu được hỗ trợ bởi MongoDB (i. e. , loại BSON) để loại trình điều khiển cơ sở dữ liệu bên ngoài (trong trường hợp này là elaticsearch-py) có thể xử lý. Điều này làm cho nó an toàn khi sử dụng để sao chép tài liệu có nội dung mà chúng tôi không thể kiểm soát nhiều (e. g. , từ quét web). Sử dụng tập lệnh này để lấy các bài đăng mới từ reddit, chúng tôi sẽ truyền các bài đăng Reddit mới tới MongoDB

./reddit2mongo --mongo-host localhost --mongo-port 27017

Khi bài đăng được xử lý, bạn sẽ thấy 20 ký tự đầu tiên của tiêu đề. Đây là (tôi thừa nhận, dần dần, nhờ các giới hạn của API Reddit) mô phỏng các phần chèn vào MongoDB mà ứng dụng của bạn đang tạo

Kích hoạt trình kết nối

Tiếp theo, chúng ta sẽ bắt đầu Mongo Connector. Để tải xuống và cài đặt Mongo Connector, bạn có thể sử dụng pip

pip install mongo-connector

Đối với phần trình diễn này, chúng tôi sẽ giả định rằng bạn đã thiết lập và chạy Elaticsearch trên máy cục bộ của mình, lắng nghe trên cổng 9200. Bạn có thể bắt đầu sao chép từ MongoDB sang Elaticsearch bằng lệnh sau

mongo-connector -m localhost:27017 -t localhost:9200 -d mongo_connector/doc_managers/elastic_doc_manager.py

Tất nhiên, nếu chúng tôi chỉ muốn thực hiện tìm kiếm văn bản trên tiêu đề và văn bản của bài đăng, chúng tôi có thể hạn chế những trường nào được chuyển qua Elaticsearch bằng tùy chọn –fields. Bằng cách này, chúng tôi có thể giảm thiểu lượng dữ liệu mà chúng tôi đang thực sự sao chép

mongo-connector -m localhost:27017 -t localhost:9200 --fields title,text -d mongo_connector/doc_managers/elastic_doc_manager.py

Giống như bạn thấy các bài đăng Reddit được reddit2mongo in ra STDOUT, bạn sẽ thấy đầu ra đến từ Trình kết nối Mongo ghi lại thực tế là mỗi tài liệu đã được chuyển tiếp tới ES cùng một lúc. Thật là một cảnh đẹp

Tìm kiếm, đàn hồi

Bây giờ chúng tôi đã sẵn sàng sử dụng Elaticsearch để thực hiện các truy vấn văn bản mờ trên tập dữ liệu của chúng tôi khi nó đến từ MongoDB. Bởi vì chúng tôi đang phát trực tiếp từ trang web của Reddit, tôi thực sự không thể nói bạn sẽ tìm thấy kết quả gì trong tập dữ liệu của mình, nhưng vì góc đặc biệt này của Internet dường như yêu mèo nhiều như chúng ta yêu công cụ tìm kiếm, nên có lẽ nó an toàn

curl -XPOST ‘http://localhost:9200/reddit.posts/_search’ -d’{
  "query": {
    "match": {
      "title": {
        "query": "kitten",
        "fuzziness": 2,
        "prefix_length": 1
      }
    }
  }
}’

Bởi vì chúng tôi đang thực hiện tìm kiếm mờ, chúng tôi thậm chí có thể thực hiện tìm kiếm từ kiten không có từ. Vì hầu hết mọi người không quá cẩn thận với chính tả của mình, nên bạn có thể tưởng tượng tính năng này mạnh mẽ như thế nào khi thực hiện tìm kiếm văn bản trực tiếp dựa trên đầu vào của người dùng

curl -XPOST ‘http://localhost:9200/reddit.posts/_search’ -d’{
  "query": {
    "match": {
      "title": {
        "query": "kiten",
        "fuzziness": 2,
        "prefix_length": 1
      }
    }
  }
}’

Tham số fuzziness xác định “khoảng cách chỉnh sửa” tối đa mà truy vấn văn bản có thể đạt được để khớp với một trường. Tham số prefix_length nói rằng kết quả phải khớp với chữ cái đầu tiên của truy vấn. cung cấp một lời giải thích tuyệt vời về cách thức hoạt động của nó. Tìm kiếm này mang lại kết quả tương tự cho tôi như phiên bản đúng chính tả của nó

Không chỉ là Phụ trang

Mặc dù bản demo của chúng tôi chỉ tận dụng lợi thế của việc truyền tài liệu liên tục từ MongoDB sang Elaticsearch, Mongo Connector không chỉ là một công cụ nhập/xuất. Khi bạn cập nhật hoặc xóa tài liệu trong MongoDB, các thao tác đó cũng được sao chép sang các hệ thống khác của bạn, giữ cho tất cả các hệ thống không đồng bộ với bản chính hiện tại của bộ bản sao. Nếu lỗi chính không thành công và xảy ra khôi phục, Trình kết nối Mongo có thể phát hiện những lỗi này và thực hiện Điều đúng đắn để duy trì tính nhất quán bất kể

Tóm tắt lại

Điều thực sự tuyệt vời ở đây là chúng tôi đang thực hiện các hoạt động trong MongoDB và Elaticsearch cùng một lúc. Nếu không có công cụ như Mongo Connector, chúng tôi sẽ phải sử dụng công cụ như mongoexport để kết xuất dữ liệu từ MongoDB theo định kỳ vào JSON, sau đó tải dữ liệu này lên một chỉ mục Elaticsearch trống, vì vậy chúng tôi không có các tài liệu đã bị xóa trước đó treo xung quanh. Đây có thể sẽ là một rắc rối lớn và chúng tôi sẽ mất khả năng gần như thời gian thực của công cụ tìm kiếm do ES cung cấp

Mặc dù Mongo Connector đã được cải thiện đáng kể kể từ lần phát hành đầu tiên, đây vẫn là một dự án thử nghiệm và còn nhiều chặng đường trước khi được hỗ trợ chính thức bởi MongoDB, Inc. Tuy nhiên, tôi cam kết trả lời các câu hỏi cũng như xem xét các yêu cầu tính năng và báo cáo lỗi được báo cáo cho trang vấn đề của Mongo Connector trên Github. Ngoài ra, hãy chắc chắn kiểm tra tài liệu đầy đủ trên trang wiki Github của nó

Tài nguyên

  • Mở một yêu cầu tính năng, báo cáo lỗi hoặc đặt câu hỏi về Mongo Connector
  • Trang chủ của Mongo Connector
  • Duyệt tài liệu đầy đủ về Mongodb Connector
  • Tìm hiểu thêm về tìm kiếm văn bản mờ Elaticsearch

← Trước

Tiêu điểm thực tập. Elle Morris

Năm nay, MongoDB đã chào đón 33 sinh viên đại học tham gia chương trình thực tập của chúng tôi về Kỹ thuật, Tiếp thị và Giáo dục. Trong loạt bài này, chúng tôi sẽ giới thiệu với bạn những sinh viên tài năng đang giúp chúng tôi chuyển đổi quá trình phát triển và vận hành cho cách chúng tôi chạy các ứng dụng ngày nay. Tôi đã có cơ hội ngồi lại với Elle Morris, người đã dành cả mùa hè này để làm việc với nhóm Hoạt động Tiếp thị. Bạn học trường nào, chuyên ngành gì, học năm mấy? . Vai trò của bạn tại MongoDB là gì? . Làm thế nào bạn biết về chương trình thực tập tại MongoDB? . Tôi quan tâm đến công ty và tìm thấy cơ hội trực tuyến. Tôi đến đây vì đây là một công ty thú vị và vị trí này tích hợp tất cả các lĩnh vực tôi quan tâm. Quê bạn là gì? . (Được xây dựng bởi Công ty Walt Disney. ) Bạn đã có kinh nghiệm sử dụng MongoDB trước khi đến chưa? . Đi làm bằng xe đạp hay phương tiện công cộng? . Một ngày (hoặc tuần) điển hình đối với bạn là gì? . 30, đồng bộ với người cố vấn của tôi, kiểm tra email, sau đó tôi làm việc trên một hàng xoay vòng khoảng 4-5 dự án tùy thuộc vào giai đoạn của Âm lịch. Bạn thích điều gì nhất ở MongoDB? . Nhưng điều tôi yêu thích nhất là khả năng làm việc với những người rất thông minh từ nhiều lĩnh vực khác nhau, những người có chung sở thích cải thiện sản phẩm và công ty. Là một thực tập sinh trong nhóm tiếp thị, tôi đã được tiếp xúc với nhiều chức năng khác nhau trong bộ phận và giữa các nhóm, điều này đã mở rộng hiểu biết của tôi về cách thức hoạt động của công ty. Khía cạnh thách thức nhất trong công việc của bạn là gì? . Bạn hy vọng đạt được điều gì khi ở đây? . Trong thực tế, điều đó có nghĩa là hiểu sản phẩm, khách hàng và cách tiếp thị và bán hàng hoạt động để kết nối cả hai và truyền tải thông tin đó đến những người không có nền tảng kỹ thuật trong khi vẫn HYPER HIỆU QUẢ. Đơn đặt hàng bữa trưa liền mạch yêu thích của bạn là gì? . Nếu tôi đang rất đói thì đó là món salad Chop't với falafel vì món này luôn được giao đến trước. Nếu không, tùy chọn nào có bánh quy sô cô la ngon nhất. Kể tên một kỹ năng bí mật mà bạn có, không liên quan đến công việc. Nếu tôi nói với bạn nó sẽ không phải là một bí mật. Tan biến theo làn khói

26 Tháng Tám, 2014

Tiếp theo →

Cách nhận đồng bộ hóa dữ liệu di động ngay với Mobile Backend as a Service (MBaaS)

Hai mươi năm trước, Watts Humphrey, ngày nay được gọi là "Cha đẻ của chất lượng phần mềm", đã tuyên bố rằng mọi doanh nghiệp đều là doanh nghiệp phần mềm. Mặc dù cái nhìn sâu sắc của anh ấy bây giờ có vẻ rõ ràng, nhưng công nghệ kỹ thuật số đã phát triển đến mức chúng ta có thể thêm vào nó. Mỗi doanh nghiệp cũng là một doanh nghiệp di động. Theo Gartner, 75% dữ liệu doanh nghiệp sẽ được tạo và xử lý từ trung tâm dữ liệu trung tâm vào năm 2025. Và theo dữ liệu. ai, 84% doanh nghiệp cho rằng tăng trưởng năng suất là nhờ ứng dụng di động. Ngày nay, công nghệ di động biến đổi mọi khía cạnh của kinh doanh. Nó cho phép lực lượng lao động thông qua điểm bán hàng, hàng tồn kho, dịch vụ và bán hàng. Nó hợp lý hóa các quy trình kinh doanh quan trọng như tự thanh toán và liên lạc với khách hàng. Và nó cung cấp năng lượng cho các thiết bị làm việc thiết yếu từ đo lường từ xa đến IoT đến sản xuất. Dữ liệu mà doanh nghiệp thu thập trên thiết bị di động và thiết bị biên có thể được sử dụng để cải thiện hiệu quả hoạt động, thúc đẩy cải tiến quy trình và mang lại trải nghiệm ứng dụng thời gian thực phong phú hơn. Nhưng tất cả những điều này đòi hỏi một giải pháp đồng bộ hóa dữ liệu di động với các hệ thống phụ trợ, nơi dữ liệu này có thể được kết hợp với dữ liệu lịch sử khác, được phân tích hoặc đưa vào các thuật toán thông minh dự đoán để đưa ra những hiểu biết mới và kích hoạt các hoạt động gia tăng giá trị khác. Nhưng việc đồng bộ hóa dữ liệu di động với các hệ thống phụ trợ có thể khó khăn vì một số lý do. Thiết bị di động liên tục ra vào vùng phủ sóng. Khi kết nối bị ngắt và sau đó tiếp tục, xung đột sẽ xuất hiện giữa các chỉnh sửa được thực hiện trên thiết bị khi ngoại tuyến và dữ liệu khác đang được xử lý trên chương trình phụ trợ. Vì vậy, giải quyết xung đột trở thành một phần quan trọng trong việc đảm bảo các thay đổi trên thiết bị di động được ghi lại trên chương trình phụ trợ theo cách đảm bảo tính toàn vẹn của dữ liệu. Đồng bộ hóa và bơi Các ứng dụng không được thiết kế có lưu ý đến đồng bộ hóa phụ trợ có thể mất nhiều thời gian để tải, dễ bị lỗi và hiển thị thông tin cũ. Khi ứng dụng không mang lại trải nghiệm tích cực, mọi người sẽ ngừng tin tưởng chúng — và ngừng sử dụng chúng. Mặt khác, một ứng dụng có khả năng đồng bộ hóa mạnh mẽ giữa kho lưu trữ dữ liệu cục bộ của thiết bị và mặt sau cho phép nhân viên xem dữ liệu trực tiếp giữa người dùng và thiết bị, cho phép cộng tác và ra quyết định theo thời gian thực. Theo Deloitte, 70% nhân viên không ngồi vào bàn làm việc mỗi ngày nên khả năng đồng bộ dữ liệu sẽ ngày càng thúc đẩy kết quả kinh doanh. Công ty khởi nghiệp Ấn Độ, FloBiz, sử dụng MongoDB Atlas Device Sync để xử lý công việc khó khăn là đồng bộ hóa các ứng dụng di động, máy tính để bàn và web. Điều này có nghĩa là ngay cả khi nhiều người dùng đang sử dụng cùng một tài khoản, ngoại tuyến và trực tuyến, sẽ không có sự cố, trùng lặp hoặc mất dữ liệu. Tại sao khó đồng bộ hóa dữ liệu Rất nhiều tổ chức chọn xây dựng các giải pháp đồng bộ hóa của riêng họ. Các giải pháp DIY có thể đi theo một trong hai cách. quá phức tạp hoặc quá đơn giản, dẫn đến đồng bộ hóa chỉ xảy ra một vài lần trong ngày hoặc chỉ theo một hướng. Các nhà phát triển có thể phức tạp và tốn thời gian để viết mã giải quyết xung đột của riêng họ vì việc xây dựng đồng bộ hóa dữ liệu đúng cách có thể mất hàng nghìn dòng mã. Các nhà phát triển thường đánh giá thấp thách thức vì bề ngoài nó có vẻ đơn giản. Họ cho rằng đồng bộ hóa chỉ đơn giản là ứng dụng đưa ra yêu cầu từ máy chủ, nhận một số dữ liệu và sử dụng dữ liệu đó để cập nhật giao diện người dùng của ứng dụng trên thiết bị. Nhưng khi xây dựng cho thiết bị di động, đây là một sự đơn giản hóa lớn. Đồng bộ hóa dữ liệu tòa nhà có thể phức tạp hơn mọi người nghĩ. Khi các nhà phát triển cố gắng xây dựng công cụ đồng bộ hóa của riêng họ, họ thường sử dụng API RESTful để kết nối ứng dụng dành cho thiết bị di động với phần phụ trợ và trao đổi dữ liệu giữa chúng. Các ứng dụng dành cho thiết bị di động ban đầu thường được xây dựng giống như các ứng dụng web hơn. Nhưng một khi nhu cầu xử lý các tình huống ngoại tuyến phát sinh và do một số chức năng yêu cầu tính bền bỉ cục bộ, thì cần phải thêm cơ sở dữ liệu di động. Đồng bộ hóa với cơ sở dữ liệu di động đó sau đó trở thành một thách thức. Việc trao đổi dữ liệu giữa thiết bị và back end trở nên phức tạp. Nó yêu cầu nhà phát triển dự đoán nhiều trường hợp sử dụng ngoại tuyến và viết mã giải quyết xung đột phức tạp. Nó có thể được thực hiện, nhưng đó là một quá trình tốn nhiều thời gian và không đảm bảo sẽ giải quyết được tất cả các trường hợp sử dụng. Khi dữ liệu được yêu cầu, các ứng dụng cần hiểu liệu mạng có khả dụng hay không và nếu không, liệu dữ liệu thích hợp có được lưu trữ cục bộ hay không, dẫn đến logic xử lý lỗi, thử lại và truy vấn phức tạp. Phần tồi tệ nhất của tất cả sự phức tạp này là nó không tạo ra sự khác biệt, nghĩa là nó không tạo ra sự khác biệt giữa doanh nghiệp với đối thủ cạnh tranh. Người dùng mong đợi chức năng được cung cấp bởi đồng bộ hóa dữ liệu và sẽ không chấp nhận bất cứ điều gì ít hơn. Một giải pháp tích hợp, vượt trội Atlas Device Sync của MongoDB kết hợp với Realm là một giải pháp phụ trợ di động dưới dạng dịch vụ (MBaaS) cho phép các nhà phát triển xây dựng các ứng dụng ưu tiên ngoại tuyến tự động làm mới khi kết nối được thiết lập lại. Tính bền vững của dữ liệu cục bộ và dữ liệu biên được quản lý bởi Realm, một nền tảng phát triển được thiết kế cho các ứng dụng hiện đại, dựa trên dữ liệu. Nhà phát triển sử dụng Realm để xây dựng ứng dụng di động, web, máy tính để bàn và IoT. Realm là một giải pháp thay thế nhanh và có thể mở rộng cho SQLite và Dữ liệu cốt lõi để duy trì sự bền bỉ phía máy khách. Dịch vụ đồng bộ hóa dữ liệu hai chiều giữa Realm và MongoDB Atlas cho phép các doanh nghiệp làm được nhiều việc hơn với dữ liệu của họ ở biên bằng cách khai thác một số khả năng xử lý dữ liệu mạnh mẽ hơn của MongoDB trên đám mây. Các sự cố đồng bộ hóa phức tạp như giải quyết xung đột được xử lý tự động bằng tính năng đồng bộ hóa tích hợp của MongoDB. Để tìm hiểu thêm về những thách thức của việc xây dựng các ứng dụng dành cho thiết bị di động theo thời gian thực có quy mô, với các trường hợp sử dụng mẫu về cách hàng nghìn doanh nghiệp đang xử lý ứng dụng này ngày nay, hãy tải xuống sách trắng của chúng tôi, Xây dựng các ứng dụng dành cho thiết bị di động theo thời gian thực có quy mô