2014-11-27 8 views
5

पर टेक्स्ट इंडेक्स का उपयोग करते समय त्रुटि मैं Mongodb पर टेक्स्ट इंडेक्स के साथ खेलने की कोशिश कर रहा हूं।Mongodb

मैं पहले से ही एक संग्रह पर एक पाठ सूचकांक का प्रयोग किया:

db.ensureIndex({field1 : "text"}) 

और यह काम करता है।

लेकिन मैं एक और संग्रह पर पुन: प्रयास और मैं निम्नलिखित संदेश मिलता है:

db.movies.ensureIndex({genres: "text"}) 
{ 
    "createdCollectionAutomatically" : false, 
    "numIndexesBefore" : 1, 
    "ok" : 0, 
    "errmsg" : "found language override field in document with non-string type", 
    "code" : 17261 
} 

संग्रह "फिल्में" एक "शैलियों" क्षेत्र है जो स्ट्रिंग की एक सरणी है। उदाहरण के लिए:

> db.movies.findOne() 
{ 
    "_id" : ObjectId("51c460fdc30a209dd9621dc4"), 
    "genres" : [ 
      "Crime", 
      "Drama" 
    ] 
    ... 
} 

यह फ़ील्ड सभी दस्तावेजों पर मौजूद है।

मुझे यह त्रुटि नहीं समझती। कोई उपाय ?

+0

आप को जोड़ सकते हैं क्या 'db.movies.getIndexes()' शो: यकीन है कि 'भाषा' बनाओ एक अशक्त नहीं स्ट्रिंग केवल इन मूल्यों (Text Search Languages देखें) शामिल है? पूर्ण मूवी दस्तावेज़ भी दिखाएं। ऐसा लगता है कि 'फिल्में' दस्तावेज़ में एक सरणी प्रकार मान के साथ 'भाषा' नाम का एक फ़ील्ड है। – BatScream

उत्तर

12

यह त्रुटि तब होती है जब आप किसी दस्तावेज़ में एक मैदान पर एक text सूचकांक बनाने का प्रयास करें, और दस्तावेज़ एक field नामित languageगैर स्ट्रिंग प्रकार का है जो है।

docs से:

If a collection contains documents or sub-documents that are in different languages, include a field named language in the documents or sub-documents and specify as its value the language for that document or sub-document.

MongoDB will use the specified language for that document or sub-document when building the text index

डिफ़ॉल्ट रूप से जिस भाषा में पाठ सूचकांक निर्माण कर रहे हैं अंग्रेजी है। यदि दस्तावेज़ के दायरे में language नामक एक फ़ील्ड मौजूद है, तो मोंगोडीबी इसे उस दस्तावेज़ के लिए इंडेक्स बनाने के लिए उपयोग की जाने वाली भाषा निर्दिष्ट करने वाला फ़ील्ड मानता है।

तो, इस तरह के मामलों में आप किसी text index का उपयोग करें और एक क्षेत्र language नामित जो दस्तावेज़ का हिस्सा है और नहीं अनुक्रमित के निर्माण के लिए भाषा निर्दिष्ट करने के लिए एक क्षेत्र है में MongoDB चाल करने के लिए, आप language_override विशेषता निर्धारित करने की जरूरत है कुछ डमी क्षेत्र में जो मौजूद नहीं है। यह मोंगो डीबी को सूचित करना है कि, आपको अंग्रेजी को डिफ़ॉल्ट भाषा के रूप में उपयोग करना चाहिए, और यदि में मेरे दस्तावेज़ में dummy नामक फ़ील्ड है, तो उस फ़ील्ड के मान का उपयोग उस दस्तावेज़ के लिए सूचकांक बनाने के लिए भाषा के रूप में करें और नहींlanguage फ़ील्ड।

db.movies.ensureIndex({ generes: "text" }, 
         { language_override: "dummy" }) 
+1

इस समस्या का उत्तर खोजने के लिए घंटे और समाधान इतना आसान था। धन्यवाद BatScream –

1

आपकी फिल्म संग्रह में एक क्षेत्र "भाषा" है जिसमें मोंगो डीबी द्वारा स्वीकार नहीं किया गया एक प्रकार है।

da or danish 
nl or dutch 
en or english 
fi or finnish 
fr or french 
de or german 
hu or hungarian 
it or italian 
nb or norwegian 
pt or portuguese 
ro or romanian 
ru or russian 
es or spanish 
sv or swedish 
tr or turkish 
+0

उत्तर का पहला भाग गलत है। उस स्थिति में आपको त्रुटि मिल जाएगी: 'भाषा असमर्थित ओवरराइड: मान' – BatScream

+0

आप सही हैं। अपडेट किया गया। धन्यवाद – anhlc