MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

MongoDB में एक बहु-भाषा टेक्स्ट इंडेक्स बनाएं

जब आप एक text बनाते हैं MongoDB में अनुक्रमणिका, अनुक्रमणिका english . की डिफ़ॉल्ट भाषा का उपयोग करती है ।

डिफ़ॉल्ट भाषा शब्द की जड़ों (यानी स्टेमिंग) को पार्स करने और स्टॉप शब्दों को अनदेखा करने के नियमों को निर्धारित करती है।

हालांकि, यदि आवश्यक हो तो आप डिफ़ॉल्ट भाषा बदल सकते हैं।

आप दस्तावेज़ स्तर पर और यहाँ तक कि उप-दस्तावेज़ स्तर पर भी कोई भाषा निर्दिष्ट कर सकते हैं। डिफ़ॉल्ट भाषा का उपयोग केवल तभी किया जाएगा जब दस्तावेज़ या उप-दस्तावेज़ स्तर पर कोई भाषा निर्दिष्ट नहीं की गई हो।

यह आलेख text . के लिए भाषा निर्दिष्ट करने के उदाहरण प्रस्तुत करता है सूचकांक।

उदाहरण संग्रह

मान लीजिए हमारे पास sitcoms . नामक संग्रह है इस तरह के दस्तावेज़ों के साथ:

{
	"_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é"
		}
	]
}

हम देख सकते हैं कि इस संग्रह में दो दस्तावेज़ हैं। प्रत्येक दस्तावेज़ में एक सिटकॉम का नाम होता है, साथ ही उस सिटकॉम नाम का विभिन्न भाषाओं में अनुवाद भी होता है। प्रत्येक अनुवाद की भाषा language . में निर्दिष्ट है संबंधित उप-दस्तावेज़ का क्षेत्र।

इस संग्रह के दूसरे दस्तावेज़ में एक language . भी शामिल है अपने शीर्ष स्तर पर फ़ील्ड (इस मामले में, "language" : "spanish" ) इसका मतलब है कि सिटकॉम नाम स्पैनिश में है (या कम से कम, स्पैनिश वह भाषा है जिसे हम इस दस्तावेज़ को अनुक्रमित करते समय उपयोग करना चाहते हैं)।

हालाँकि, पहले दस्तावेज़ में ऐसा कोई फ़ील्ड नहीं है। तथ्य यह है कि पहले दस्तावेज़ में शीर्ष-स्तरीय language नहीं है फ़ील्ड का अर्थ है कि हम चाहते हैं कि इसे डिफ़ॉल्ट भाषा का उपयोग करके अनुक्रमित किया जाए। यदि अनुक्रमण के दौरान कोई डिफ़ॉल्ट भाषा निर्दिष्ट नहीं है, तो डिफ़ॉल्ट भाषा अंग्रेजी होगी।

यदि किसी एम्बेडेड दस्तावेज़ में कोई फ़ील्ड नहीं है जो भाषा निर्दिष्ट करता है, तो वह संलग्न दस्तावेज़ के भाषा फ़ील्ड का उपयोग करेगा। यदि संलग्न दस्तावेज़ में भाषा फ़ील्ड नहीं है, तो यह डिफ़ॉल्ट भाषा का उपयोग करेगा।

एकाधिक भाषाओं के लिए एक टेक्स्ट इंडेक्स बनाएं

चलिए आगे बढ़ते हैं और एक text बनाते हैं उपरोक्त संग्रह के लिए अनुक्रमणिका।

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

यह एक कंपाउंड text बनाता है original_name पर अनुक्रमणिका फ़ील्ड, और translations.sitcom_name फ़ील्ड (यानी sitcom_name एम्बेडेड दस्तावेज़ों में फ़ील्ड)।

आइए अब getIndexes() का उपयोग करें उस सूचकांक पर एक नज़र डालने के लिए:

db.sitcoms.getIndexes()

परिणाम:

[
	{
		"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
	}
]

हम देख सकते हैं कि यह अंग्रेजी की एक डिफ़ॉल्ट भाषा का उपयोग करता है। इसे "default_language" : "english" . के रूप में निर्दिष्ट किया गया है ।

डिफ़ॉल्ट भाषा बदलें

यदि आवश्यक हो तो हम इंडेक्स बनाते समय एक अलग डिफ़ॉल्ट भाषा सेट कर सकते हैं।

आइए इंडेक्स को छोड़ दें और इसे एक अलग डिफ़ॉल्ट भाषा के साथ फिर से बनाएं:

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

आइए एक नज़र डालते हैं इंडेक्स पर:

db.sitcoms.getIndexes()

परिणाम:

[
	{
		"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
	}
]

हम देख सकते हैं कि डिफ़ॉल्ट भाषा अब danish है निर्दिष्ट के रूप में।

language_override पैरामीटर

आप सोच रहे होंगे "MongoDB को कैसे पता चला कि दस्तावेज़ की language फ़ील्ड वह फ़ील्ड है जो भाषा निर्दिष्ट करती है?"।

और यह एक बड़ा सवाल है। आखिरकार, क्या होगा यदि हम क्षेत्र को एक अलग नाम देते - MongoDB को यह कैसे पता चलेगा कि यह भाषा के लिए उपयोग करने के लिए क्षेत्र है?

यदि आप उपरोक्त अनुक्रमणिका को देखते हैं, तो आप देखेंगे कि इसमें एक language_override है खेत। विशेष रूप से, यह इस प्रकार है:"language_override" : "language"

इसका मतलब यह है कि दस्तावेज़ की language फ़ील्ड वह फ़ील्ड होगी जिसका उपयोग अनुक्रमणिका भाषा को ओवरराइड करने के लिए करती है।

जब आप एक text बनाते हैं अनुक्रमणिका, अनुक्रमणिका language . नामक किसी भी क्षेत्र की तलाश करेगी और फिर उन्हें संबंधित दस्तावेज़ के लिए भाषा के रूप में उपयोग करें।

हालांकि, नाम language पत्थर में स्थापित नहीं है। आप चाहें तो इसे बदल सकते हैं।

मान लीजिए कि हमारे संग्रह में ऐसे दस्तावेज़ हैं जहाँ फ़ील्ड नाम डेनिश में हैं।

इस तरह:

{
	"_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é"
		}
	]
}

इस मामले में, sprog वह क्षेत्र है जो प्रत्येक दस्तावेज़ की भाषा निर्धारित करता है।

इसलिए, हम इस प्रकार इंडेक्स बना सकते हैं:

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

आइए सूचकांक की जाँच करें:

db.sitcoms.getIndexes()

परिणाम:

[
	{
		"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
	}
]

हमारे नए बनाए गए text . में अनुक्रमणिका, हमारे पास default_language है danish . के रूप में , और language_override sprog . के रूप में फ़ील्ड .

उपलब्ध भाषाएं

लेखन के समय, लगभग 15 भाषाएँ हैं जो text . द्वारा समर्थित हैं अनुक्रमणिका और $text ऑपरेटर।

आप लंबे रूप में भाषा के नाम (उपरोक्त उदाहरणों के अनुसार) या दो अक्षर वाले ISO 639-1 भाषा कोड का उपयोग कर सकते हैं।

पाठ खोज भाषाओं की एक सूची MongoDB वेबसाइट पर उपलब्ध है।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला स्कीमा के साथ पासवर्ड की पुष्टि / पासवर्ड की पुष्टि

  2. क्या मुझे मैन्युअल रूप से एक नेवला कनेक्शन बंद करने की आवश्यकता है?

  3. MongoDB बैकअप और MongoDump का उपयोग करके पुनर्स्थापित करें

  4. मोंगोडब दस्तावेजों को एक संग्रह से दूसरे संग्रह में ले जाता है

  5. पांडा का उपयोग करके बड़े डेटा कार्यप्रवाह