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

Tạo chỉ mục văn bản ký tự đại diện trong MongoDB

MongoDB cung cấp cho chúng tôi khả năng tạo chỉ mục văn bản ký tự đại diện.

Chỉ mục văn bản ký tự đại diện tương tự như chỉ mục ký tự đại diện, ngoại trừ chỉ mục văn bản ký tự đại diện hỗ trợ $text toán tử, trong khi các chỉ mục ký tự đại diện thì không.

Điều đó nói rằng, việc tạo mỗi loại chỉ mục rất giống nhau theo nghĩa là cả hai đều dùng chung ký tự đại diện $** trường mẫu.

Ví dụ

Giả sử chúng ta có một bộ sưu tập được gọi là posts và nó chứa các tài liệu giống như sau:

{
	"_id" : 1,
	"title" : "Title text...",
	"body" : "Body text...",
	"abstract" : "Abstract text...",
	"tags" : [
		"tag1",
		"tag2",
		"tag3"
	]
}

Chúng tôi có thể tạo chỉ mục văn bản ký tự đại diện trên bộ sưu tập đó như sau:

db.posts.createIndex( { "$**": "text" } )

Đầu ra:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

Điều đó sử dụng ký tự đại diện $** trường mẫu để tạo chỉ mục trên tất cả các trường văn bản. Khi bạn tạo một chỉ mục như thế này, MongoDB lập chỉ mục mọi trường có chứa dữ liệu chuỗi cho mỗi tài liệu trong bộ sưu tập.

Làm điều này có thể hữu ích nếu bộ sưu tập chứa nhiều nội dung không có cấu trúc và không có sự nhất quán của các trường văn bản trong tài liệu. Trong những trường hợp như vậy, bạn sẽ không thể đưa các trường vào chỉ mục một cách rõ ràng vì bạn sẽ không biết trường nào sẽ có trong tài liệu.

Trường có trọng số

Bạn có thể sử dụng weights để gán các trọng số khác nhau cho các trường trong chỉ mục văn bản ký tự đại diện.

Ví dụ:

db.posts.createIndex( 
  { "$**": "text" },
  { weights: {
      body: 10,
      abstract: 5
    } 
  } 
)

Đầu ra:

{
	"createdCollectionAutomatically" : false,
	"numIndexesBefore" : 1,
	"numIndexesAfter" : 2,
	"ok" : 1
}

Trong trường hợp này, body trường có trọng số là 10abstract trường có trọng số là 5 . Điều này có nghĩa là body trường có tác động gấp đôi trường trừu tượng và tác động gấp mười lần đối với tất cả các trường văn bản khác (vì chúng sẽ được gán trọng số mặc định là 1).

Sau khi tạo chỉ mục đó, nếu chúng ta gọi getIndexes() để trả về tất cả các chỉ mục cho tập hợp, chúng ta có thể thấy các trọng số được cung cấp cho các trường:

db.posts.getIndexes()

Kết quả:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "$**_text",
		"weights" : {
			"$**" : 1,
			"abstract" : 5,
			"body" : 10
		},
		"default_language" : "english",
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]

Như mong đợi, body trường nhận được 10 , abstract trường nhận được 5 và tất cả những người khác nhận được 1 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ cmp

  2. Cập nhật giá trị trong MongoDB dựa trên giá trị hiện tại của nó

  3. Cách đưa nhiều hàng vào danh sách được phân tách bằng dấu phẩy trong SQL

  4. Cách sử dụng Node.js để tạo kết nối đường hầm SSH với cơ sở dữ liệu MongoDB

  5. Chọn tài liệu trong đó tất cả các giá trị trong một trường mảng tồn tại trong một mảng khác