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

Tạo chỉ mục văn bản đa ngôn ngữ trong MongoDB

Khi bạn tạo một text chỉ mục trong MongoDB, chỉ mục sử dụng ngôn ngữ mặc định là english .

Ngôn ngữ mặc định xác định các quy tắc để phân tích cú pháp từ gốc (tức là từ gốc) và bỏ qua các từ dừng.

Tuy nhiên, bạn có thể thay đổi ngôn ngữ mặc định nếu cần.

Bạn cũng có thể chỉ định một ngôn ngữ ở cấp tài liệu và thậm chí ở cấp tài liệu nhỏ. Ngôn ngữ mặc định sẽ chỉ được sử dụng nếu ngôn ngữ chưa được chỉ định ở cấp tài liệu hoặc cấp dưới tài liệu.

Bài viết này trình bày các ví dụ về việc chỉ định ngôn ngữ cho text chỉ mục.

Bộ sưu tập mẫu

Giả sử chúng ta có một bộ sưu tập có tên là sitcoms với các tài liệu như thế này:

{
	"_id" : 1,
	"original_name" : "Family Guy",
	"translations" : {
		"language" : "german",
		"sitcom_name" : "Familienmensch"
	}
}
{
	"_id" : 2,
	"original_name" : "Cuéntame como pasó",
	"language" : "spanish",
	"translations" : [
		{
			"language" : "english",
			"sitcom_name" : "Tell me how it happened"
		},
		{
			"language" : "french",
			"sitcom_name" : "Raconte-moi comment cela s'est passé"
		}
	]
}

Chúng ta có thể thấy rằng có hai tài liệu trong bộ sưu tập này. Mỗi tài liệu chứa tên của một bộ phim sitcom, cùng với các bản dịch của tên bộ phim đó bằng các ngôn ngữ khác nhau. Ngôn ngữ của mỗi bản dịch được chỉ định bằng ngôn ngữ language trường của tiểu tài liệu tương ứng.

Tài liệu thứ hai trong bộ sưu tập này cũng bao gồm một language ở cấp cao nhất của nó (trong trường hợp này là "language" : "spanish" ). Điều này có nghĩa là tên sitcom bằng tiếng Tây Ban Nha (hoặc ít nhất, tiếng Tây Ban Nha là ngôn ngữ chúng tôi muốn sử dụng khi tài liệu này được lập chỉ mục).

Tuy nhiên, tài liệu đầu tiên không chứa trường như vậy. Thực tế là tài liệu đầu tiên không chứa language cấp cao nhất có nghĩa là chúng tôi muốn nó được lập chỉ mục bằng ngôn ngữ mặc định. Nếu không có ngôn ngữ mặc định nào được chỉ định trong quá trình lập chỉ mục, thì ngôn ngữ mặc định sẽ là tiếng Anh.

Nếu tài liệu được nhúng không chứa trường chỉ định ngôn ngữ thì tài liệu đó sẽ sử dụng trường ngôn ngữ của tài liệu kèm theo. Nếu tài liệu kèm theo không chứa trường ngôn ngữ thì tài liệu đó sẽ sử dụng ngôn ngữ mặc định.

Tạo chỉ mục văn bản cho nhiều ngôn ngữ

Hãy tiếp tục và tạo một text chỉ mục cho bộ sưu tập trên.

db.sitcoms.createIndex( 
  { 
    "original_name": "text",
    "translations.sitcom_name": "text"
  }
)

Điều đó tạo ra một text kết hợp lập chỉ mục trên original_name và trường translations.sitcom_name trường (tức là sitcom_name trong tài liệu nhúng).

Bây giờ hãy sử dụng getIndexes() để xem chỉ mục đó:

db.sitcoms.getIndexes()

Kết quả:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "original_name_text_translations.sitcom_name_text",
		"weights" : {
			"original_name" : 1,
			"translations.sitcom_name" : 1
		},
		"default_language" : "english",
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]

Chúng ta có thể thấy rằng nó sử dụng ngôn ngữ mặc định là tiếng Anh. Điều này được chỉ định là "default_language" : "english" .

Thay đổi ngôn ngữ mặc định

Chúng tôi có thể đặt một ngôn ngữ mặc định khác khi tạo chỉ mục nếu được yêu cầu.

Hãy bỏ chỉ mục và tạo lại nó bằng một ngôn ngữ mặc định khác:

db.sitcoms.dropIndex("original_name_text_translations.sitcom_name_text")
db.sitcoms.createIndex( 
  { 
    "original_name": "text",
    "translations.sitcom_name": "text"
  },
  {
    "default_language": "danish"
  }
)

Hãy xem chỉ mục:

db.sitcoms.getIndexes()

Kết quả:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "original_name_text_translations.sitcom_name_text",
		"default_language" : "danish",
		"weights" : {
			"original_name" : 1,
			"translations.sitcom_name" : 1
		},
		"language_override" : "language",
		"textIndexVersion" : 3
	}
]

Chúng ta có thể thấy rằng ngôn ngữ mặc định bây giờ là danish như đã chỉ định.

language_override Tham số

Bạn có thể tự hỏi “làm thế nào mà MongoDB biết rằng language của tài liệu trường là trường chỉ định ngôn ngữ? ”.

Và đó là một câu hỏi tuyệt vời. Rốt cuộc, điều gì sẽ xảy ra nếu chúng tôi đặt cho trường một tên khác - làm thế nào MongoDB biết rằng là trường để sử dụng cho ngôn ngữ?

Nếu bạn nhìn vào chỉ mục trên, bạn sẽ thấy rằng nó có language_override đồng ruộng. Cụ thể, nó giống như sau:"language_override" : "language"

Điều đó có nghĩa là language của tài liệu trường sẽ là trường mà chỉ mục sử dụng để ghi đè ngôn ngữ.

Khi bạn tạo một text chỉ mục, chỉ mục sẽ tìm kiếm bất kỳ trường nào được gọi là language và sau đó sử dụng chúng làm ngôn ngữ cho tài liệu tương ứng.

Tuy nhiên, tên language không được đặt trong đá. Bạn có thể thay đổi nó nếu bạn muốn.

Giả sử bộ sưu tập của chúng ta chứa các tài liệu có tên trường bằng tiếng Đan Mạch.

Như thế này:

{
	"_id" : 1,
	"originalt_navn" : "Family Guy",
	"sprog" : "english",
	"oversættelser" : {
		"sprog" : "german",
		"sitcom-navn" : "Familienmensch"
	}
}
{
	"_id" : 2,
	"originalt_navn" : "Cuéntame como pasó",
	"sprog" : "spanish",
	"oversættelser" : [
		{
			"sprog" : "english",
			"sitcom-navn" : "Tell me how it happened"
		},
		{
			"sprog" : "french",
			"sitcom-navn" : "Raconte-moi comment cela s'est passé"
		}
	]
}

Trong trường hợp này, sprog là trường xác định ngôn ngữ của mỗi tài liệu.

Do đó, chúng ta có thể tạo chỉ mục như sau:

db.sitcoms.createIndex( 
  { 
    "original_name": "text",
    "translations.sitcom_name": "text"
  },
  {
    "default_language": "danish",
    "language_override": "sprog"
  }
)

Hãy kiểm tra chỉ mục:

db.sitcoms.getIndexes()

Kết quả:

[
	{
		"v" : 2,
		"key" : {
			"_id" : 1
		},
		"name" : "_id_"
	},
	{
		"v" : 2,
		"key" : {
			"_fts" : "text",
			"_ftsx" : 1
		},
		"name" : "original_name_text_translations.sitcom_name_text",
		"default_language" : "danish",
		"language_override" : "sprog",
		"weights" : {
			"original_name" : 1,
			"translations.sitcom_name" : 1
		},
		"textIndexVersion" : 3
	}
]

Trong text mới được tạo của chúng tôi chỉ mục, chúng ta có default_language dưới dạng danishlanguage_override trường dưới dạng sprog .

Các ngôn ngữ có sẵn

Tại thời điểm viết bài, có khoảng 15 ngôn ngữ được hỗ trợ bởi text chỉ mục và $text nhà điều hành.

Bạn có thể sử dụng tên ngôn ngữ dạng dài (như trong các ví dụ trên) hoặc mã ngôn ngữ ISO 639-1 gồm hai chữ cái.

Danh sách các ngôn ngữ tìm kiếm văn bản có sẵn trên trang web MongoDB.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Hiểu về độ bền &độ an toàn khi viết trong MongoDB

  2. Truy vấn MongoDB với giá trị null

  3. Hiệu suất chèn hàng loạt trong MongoDB cho các bộ sưu tập lớn

  4. Triển khai và giám sát cơ sở dữ liệu nguồn mở miễn phí với ClusterControl Community Edition

  5. Cách sử dụng GridFS để lưu trữ hình ảnh bằng Node.js và Mongoose