MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách thực hiện Tìm kiếm Toàn văn trong MongoDB

Một trong những cơ sở dữ liệu NoSQL hàng đầu, MongoDB nổi tiếng với hiệu suất nhanh, lược đồ đa năng, khả năng mở rộng và khả năng lập chỉ mục tuyệt vời. Hãy để chúng tôi xem xét một số bối cảnh trước khi chúng tôi đi vào một số chi tiết. Tìm kiếm toàn văn là một tính năng cần thiết khi chúng ta nói về việc tìm kiếm nội dung trên internet. Tìm kiếm trên google là ví dụ tốt nhất cho điều này khi chúng ta thấy nội dung bằng cách sử dụng các cụm từ hoặc từ khóa. Trong bài viết này, chúng ta sẽ tìm hiểu về khả năng tìm kiếm toàn văn bản trong MongoDB dựa trên chỉ mục văn bản.

Tạo cơ sở dữ liệu mẫu

Trước khi bắt đầu, chúng tôi sẽ tạo một cơ sở dữ liệu mẫu sẽ được sử dụng trong quá trình hướng dẫn.

Chúng tôi sẽ tạo cơ sở dữ liệu với tên myDB và tạo một bộ sưu tập với tên sách . Đối với điều này, tuyên bố sẽ như sau.

> use myDB
> db.createCollection("books")
>

Hãy chèn một số tài liệu bằng cách sử dụng câu lệnh sau.

> db.books.insert([
	{
      "title": "Eloquent JavaScript, Second Edition",
      "subtitle": "A Modern Introduction to Programming",
      "author": "Marijn Haverbeke",
      "publisher": "No Starch Press",
      "description": "JavaScript lies at the heart of almost every modern web application, from social apps to the newest browser-based games. Though simple for beginners to pick up and play with, JavaScript is a flexible, complex language that you can use to build full-scale applications."
    },
    {
      "title": "Learning JavaScript Design Patterns",
      "subtitle": "A JavaScript and jQuery Developer's Guide",
      "author": "Addy Osmani",
      "publisher": "O'Reilly Media",
      "description": "With Learning JavaScript Design Patterns, you'll learn how to write beautiful, structured, and maintainable JavaScript by applying classical and modern design patterns to the language. If you want to keep your code efficient, more manageable, and up-to-date with the latest best practices, this book is for you."
    },
    {
      "title": "Speaking JavaScript",
      "subtitle": "An In-Depth Guide for Programmers",
      "author": "Axel Rauschmayer",
      "publisher": "O'Reilly Media",
      "description": "Like it or not, JavaScript is everywhere these days, from browser to server to mobile and now you, too, need to learn the language or dive deeper than you have. This concise book guides you into and through JavaScript, written by a veteran programmer who once found himself in the same position."
    },
    {
      "title": "Programming JavaScript Applications",
      "subtitle": "Robust Web Architecture with Node, HTML5, and Modern JS Libraries",
      "author": "Eric Elliott",
      "publisher": "O'Reilly Media",
      "description": "Take advantage of JavaScript's power to build robust web-scale or enterprise applications that are easy to extend and maintain. By applying the design patterns outlined in this practical book, experienced JavaScript developers will learn how to write flexible and resilient code that's easier-yes, easier-to work with as your codebase grows."
    },
    {
      "title": "Understanding ECMAScript 6",
      "subtitle": "The Definitive Guide for JavaScript Developers",
      "author": "Nicholas C. Zakas",
      "publisher": "No Starch Press",
      "description": "ECMAScript 6 represents the biggest update to the core of JavaScript in the history of the language. In Understanding ECMAScript 6, expert developer Nicholas C. Zakas provides a complete guide to the object types, syntax, and other exciting changes that ECMAScript 6 brings to JavaScript."
    }
])

Tạo chỉ mục văn bản

Chúng ta cần tạo một chỉ mục văn bản trên các trường để thực hiện tìm kiếm văn bản. Chúng tôi có thể tạo điều này trên một hoặc nhiều trường. Câu lệnh sau sẽ tạo một chỉ mục văn bản trên một trường.

>db.books.createIndex({"description":"text"})

Chúng tôi sẽ tạo một chỉ mục văn bản trên mô tả phụ đề các trường cho hướng dẫn này. Chúng tôi chỉ có thể tạo một chỉ mục văn bản cho mỗi bộ sưu tập trong MongoDB. Vì vậy, Chúng tôi sẽ tạo một chỉ mục văn bản ghép bằng cách sử dụng câu lệnh sau.

>db.books.createIndex({"subtitle":"text","description":"text"})

Bây giờ chúng tôi sẽ cố gắng tìm kiếm các tài liệu có từ khóa 'ECMAScript' trong mô tả phụ đề lĩnh vực. Đối với điều này, chúng ta có thể sử dụng câu lệnh dưới đây.

db.books.find({$text: {$search: "ECMAScript"}})

Ví dụ

>db.books.find({$text: {$search: "ECMAScript"}},{ subtitle: 1, description: 1 })
	{
    "_id" : ObjectId("602b09cb3cb6144ada1c62fe"),
    "subtitle" : "The Definitive Guide for JavaScript Developers",
    "description" : "ECMAScript 6 represents the biggest update to the core of JavaScript in the history of the language. In Understanding ECMAScript 6, expert developer Nicholas C. Zakas provides a complete guide to the object types, syntax, and other exciting changes that ECMAScript 6 brings to JavaScript."
	}
>

Cụm từ

Bạn có thể tìm kiếm các cụm từ bằng cách sử dụng chỉ mục văn bản. Theo mặc định, tìm kiếm văn bản thực hiện tìm kiếm HOẶC cho tất cả các từ trong cụm từ. Nếu bạn muốn tìm kiếm 'các mẫu thiết kế hiện đại', nó sẽ tìm kiếm các tài liệu với các từ khóa hiện đại, thiết kế hoặc mẫu.

Ví dụ

>db.books.find({$text: {$search: "modern design patterns"}},{ subtitle: 1, description: 1 })
	{
    "_id" : ObjectId("602b098f3cb6144ada1c2ea1"),
    "subtitle" : "A JavaScript and jQuery Developer's Guide",
    "description" : "With Learning JavaScript Design Patterns, you'll learn how to write beautiful, structured, and maintainable JavaScript by applying classical and modern design patterns to the language. If you want to keep your code efficient, more manageable, and up-to-date with the latest best practices, this book is for you."
	},
	{
    "_id" : ObjectId("602b09b93cb6144ada1c4bca"),
    "subtitle" : "Robust Web Architecture with Node, HTML5, and Modern JS Libraries",
    "description" : "Take advantage of JavaScript's power to build robust web-scale or enterprise applications that are easy to extend and maintain. By applying the design patterns outlined in this practical book, experienced JavaScript developers will learn how to write flexible and resilient code that's easier-yes, easier-to work with as your code base grows.",
	},
	{
    "_id" : ObjectId("602b095c3cb6144ada1c1028"),
    "subtitle" : "A Modern Introduction to Programming",
    "description" : "JavaScript lies at the heart of almost every modern web application, from social apps to the newest browser-based games. Though simple for beginners to pick up and play with, JavaScript is a flexible, complex language that you can use to build full-scale applications."
	}
>

Nếu bạn muốn cùng nhau tìm kiếm các cụm từ chính xác như tài liệu có 'mẫu thiết kế hiện đại', bạn có thể làm như vậy bằng cách chỉ định dấu ngoặc kép trong văn bản tìm kiếm.

Ví dụ

>db.books.find({$text: {$search: "\"modern design patterns\""}},{ subtitle: 1, description: 1 })
	{
    "_id" : ObjectId("602b098f3cb6144ada1c2ea1"),
    "subtitle" : "A JavaScript and jQuery Developer's Guide",
    "description" : "With Learning JavaScript Design Patterns, you'll learn how to write beautiful, structured, and maintainable JavaScript by applying classical and modern design patterns to the language. If you want to keep your code efficient, more manageable, and up-to-date with the latest best practices, this book is for you."
}

Phủ định

Nếu bạn muốn loại trừ các tài liệu có chứa một từ cụ thể, bạn có thể sử dụng tìm kiếm phủ định. Ví dụ:nếu bạn định tìm kiếm tất cả các tài liệu bằng 'JavaScript' nhưng không phải 'HTML5' hoặc 'ECMAScript', bạn có thể tìm kiếm như ví dụ dưới đây.

Ví dụ

>db.books.find({$text: {$search: "JavaScript -HTML5 -ECMAScript"}},{ subtitle: 1, description: 1 })
	{
    "_id" : ObjectId("602b098f3cb6144ada1c2ea1"),
    "subtitle" : "A JavaScript and jQuery Developer's Guide",
    "description" : "With Learning JavaScript Design Patterns, you'll learn how to write beautiful, structured, and maintainable JavaScript by applying classical and modern design patterns to the language. If you want to keep your code efficient, more manageable, and up-to-date with the latest best practices, this book is for you."
	},
	{
    "_id" : ObjectId("602b09a83cb6144ada1c4973"),
    "subtitle" : "An In-Depth Guide for Programmers",
    "description" : "Like it or not, JavaScript is everywhere these days, from browser to server to mobile and now you, too, need to learn the language or dive deeper than you have. This concise book guides you into and through JavaScript, written by a veteran programmer who once found himself in the same position."
	},
	{
    "_id" : ObjectId("602b095c3cb6144ada1c1028"),
    "subtitle" : "A Modern Introduction to Programming",
    "description" : "JavaScript lies at the heart of almost every modern web application, from social apps to the newest browser-based games. Though simple for beginners to pick up and play with, JavaScript is a flexible, complex language that you can use to build full-scale applications."
	}

Điểm Tìm kiếm Văn bản

Tìm kiếm văn bản cung cấp điểm cho mỗi tài liệu thể hiện mức độ liên quan của tài liệu với truy vấn tìm kiếm. Điểm này có thể được sử dụng để sắp xếp tất cả các bản ghi được trả về trong kết quả tìm kiếm. Điểm số cao hơn sẽ cho thấy kết quả phù hợp nhất.

Ví dụ

>db.books.find({$text: {$search: "JavaScript "}},{score: {$meta: "textScore"}, subtitle: 1, description: 1 }).sort({score:{$meta:"textScore"}})
	{
    "_id" : ObjectId("602b098f3cb6144ada1c2ea1"),
    "subtitle" : "A JavaScript and jQuery Developer's Guide",
    "description" : "With Learning JavaScript Design Patterns, you'll learn how to write beautiful, structured, and maintainable JavaScript by applying classical and modern design patterns to the language. If you want to keep your code efficient, more manageable, and up-to-date with the latest best practices, this book is for you.",
    "score" : 1.43269230769231
	},
	{
    "_id" : ObjectId("602b09cb3cb6144ada1c62fe"),
    "subtitle" : "The Definitive Guide for JavaScript Developers",
    "description" : "ECMAScript 6 represents the biggest update to the core of JavaScript in the history of the language. In Understanding ECMAScript 6, expert developer Nicholas C. Zakas provides a complete guide to the object types, syntax, and other exciting changes that ECMAScript 6 brings to JavaScript.",
    "score" : 1.42672413793103
	},
	{
    "_id" : ObjectId("602b09a83cb6144ada1c4973"),
    "subtitle" : "An In-Depth Guide for Programmers",
    "description" : "Like it or not, JavaScript is everywhere these days, from browser to server to mobile and now you, too, need to learn the language or dive deeper than you have. This concise book guides you into and through JavaScript, written by a veteran programmer who once found himself in the same position.",
    "score" : 0.818181818181818
	},
	{
    "_id" : ObjectId("602b095c3cb6144ada1c1028"),
    "subtitle" : "A Modern Introduction to Programming",
    "description" : "JavaScript lies at the heart of almost every modern web application, from social apps to the newest browser-based games. Though simple for beginners to pick up and play with, JavaScript is a flexible, complex language that you can use to build full-scale applications.",
    "score" : 0.801724137931034
	},
	{
    "_id" : ObjectId("602b09b93cb6144ada1c4bca"),
    "subtitle" : "Robust Web Architecture with Node, HTML5, and Modern JS Libraries",
    "description" : "Take advantage of JavaScript's power to build robust web-scale or enterprise applications that are easy to extend and maintain. By applying the design patterns outlined in this practical book, experienced JavaScript developers will learn how to write flexible and resilient code that's easier-yes, easier-to work with as your codebase grows.",
    "score" : 0.792857142857143
	}

Từ dừng

Toán tử $ text lọc ra các từ dừng theo ngôn ngữ cụ thể, chẳng hạn như a, an, the và bằng tiếng Anh. Tìm kiếm bên dưới sẽ không trả về bất kỳ tài liệu nào trong kết quả.

Ví dụ

>db.books.find({$text: {$search: "is"}},{subtitle: 1, description: 1 })
	Fetched 0 record(s)

Từ có gốc

Toán tử $ text khớp với từ gốc hoàn chỉnh. Vì vậy, nếu một số trường tài liệu có chứa từ học hoặc học, một tìm kiếm về từ học hoặc học sẽ dẫn đến kết quả tương tự.

Ví dụ

>db.books.find({$text: {$search: " learn"}},{subtitle: 1, description: 1 }) or >db.books.find({$text: {$search: " learning"}},{subtitle: 1, description: 1 })
	{
    "_id" : ObjectId("602b098f3cb6144ada1c2ea1"),
    "subtitle" : "A JavaScript and jQuery Developer's Guide",
    "description" : "With Learning JavaScript Design Patterns, you'll learn how to write beautiful, structured, and maintainable JavaScript by applying classical and modern design patterns to the language. If you want to keep your code efficient, more manageable, and up-to-date with the latest best practices, this book is for you."
	},
	{
    "_id" : ObjectId("602b09a83cb6144ada1c4973"),
    "subtitle" : "An In-Depth Guide for Programmers",
    "description" : "Like it or not, JavaScript is everywhere these days, from browser to server to mobile and now you, too, need to learn the language or dive deeper than you have. This concise book guides you into and through JavaScript, written by a veteran programmer who once found himself in the same position."
	},
	{
    "_id" : ObjectId("602b09b93cb6144ada1c4bca"),
    "subtitle" : "Robust Web Architecture with Node, HTML5, and Modern JS Libraries",
    "description" : "Take advantage of JavaScript's power to build robust web-scale or enterprise applications that are easy to extend and maintain. By applying the design patterns outlined in this practical book, experienced JavaScript developers will learn how to write flexible and resilient code that's easier-yes, easier-to work with as your codebase grows."
	}

Kết luận

Tôi hy vọng bạn đã học được một cái gì đó mới ngày hôm nay. Đây là một bài viết thú vị trên MongoDB tự lưu trữ. Tôi cũng mời bạn thử công cụ của riêng bạn và chia sẻ kinh nghiệm của bạn trong phần bình luận. Ngoài ra, nếu bạn gặp bất kỳ vấn đề nào với bất kỳ định nghĩa nào ở trên, vui lòng hỏi tôi trong phần nhận xét bên dưới.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để sử dụng MongoDB với các hứa hẹn trong Node.js?

  2. MongoDB 2.4.1 hiện đã có trên ScaleGrid

  3. Lỗi giao dịch PyMongo:Số giao dịch chỉ được phép trên một thành viên hoặc mongos đặt bản sao

  4. đếm số lần xuất hiện của mảng trên tất cả các tài liệu với mongo

  5. Cách triển khai máy chủ Percona cho MongoDB để có tính khả dụng cao