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

MongoDB में वाइल्डकार्ड टेक्स्ट इंडेक्स बनाएं

MongoDB हमें वाइल्डकार्ड टेक्स्ट इंडेक्स बनाने की क्षमता प्रदान करता है।

वाइल्डकार्ड टेक्स्ट इंडेक्स वाइल्डकार्ड इंडेक्स के समान हैं, सिवाय इसके कि वाइल्डकार्ड टेक्स्ट इंडेक्स $text का समर्थन करते हैं ऑपरेटर, जबकि वाइल्डकार्ड इंडेक्स नहीं करते हैं।

उस ने कहा, प्रत्येक इंडेक्स प्रकार बनाना इस अर्थ में बहुत समान है कि वे दोनों वाइल्डकार्ड साझा करते हैं $** फ़ील्ड पैटर्न।

उदाहरण

मान लीजिए हमारे पास posts . नामक संग्रह है , और इसमें ऐसे दस्तावेज़ होते हैं जो इस तरह दिखते हैं:

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

हम उस संग्रह पर इस तरह एक वाइल्डकार्ड टेक्स्ट इंडेक्स बना सकते हैं:

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

आउटपुट:

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

वह वाइल्डकार्ड $** . का उपयोग करता है सभी टेक्स्ट फ़ील्ड पर एक इंडेक्स बनाने के लिए फ़ील्ड पैटर्न। जब आप इस तरह की एक अनुक्रमणिका बनाते हैं, तो MongoDB संग्रह में प्रत्येक दस्तावेज़ के लिए स्ट्रिंग डेटा वाले प्रत्येक फ़ील्ड को अनुक्रमित करता है।

ऐसा करना उपयोगी हो सकता है यदि संग्रह में बहुत सारी असंरचित सामग्री है, और दस्तावेज़ों में टेक्स्ट फ़ील्ड की कोई संगति नहीं है। ऐसे मामलों में, आप इंडेक्स में फ़ील्ड को स्पष्ट रूप से शामिल नहीं कर पाएंगे क्योंकि आपको नहीं पता होगा कि दस्तावेज़ों में कौन से फ़ील्ड होने जा रहे हैं।

भारित फ़ील्ड

आप weights का उपयोग कर सकते हैं वाइल्डकार्ड टेक्स्ट इंडेक्स में फ़ील्ड को अलग-अलग वज़न असाइन करने के लिए पैरामीटर।

उदाहरण:

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

आउटपुट:

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

इस मामले में, body फ़ील्ड को 10 . का भार मिलता है और abstract फ़ील्ड को 5 . का भार मिलता है . इसका मतलब है कि body फ़ील्ड में एब्सट्रैक्ट फ़ील्ड का प्रभाव दोगुना है, और अन्य सभी टेक्स्ट फ़ील्ड के प्रभाव का दस गुना है (क्योंकि उन्हें 1 का डिफ़ॉल्ट भार सौंपा जाएगा)।

उस इंडेक्स को बनाने के बाद, अगर हम getIndexes() . को कॉल करते हैं संग्रह के लिए सभी अनुक्रमणिका वापस करने के लिए, हम फ़ील्ड को दिए गए भार देख सकते हैं:

db.posts.getIndexes()

परिणाम:

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

जैसी अपेक्षित थी, body फ़ील्ड को 10 मिलता है , abstract फ़ील्ड को 5 मिलता है , और अन्य सभी को 1 . मिलता है ।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. नेवला खोज () परिणाम नहीं लौटा रहा है

  2. YCSB के साथ MongoDB को बेंचमार्क कैसे करें?

  3. Android ऐप्स में MongoDB स्टिच का उपयोग कैसे करें

  4. नेवला/मोंगोडब कस्टम सॉर्ट

  5. नेवला सीमा/ऑफ़सेट और गणना क्वेरी