2016-05-31 3 views
0

Итак, я использую какое-то странное поведение в моей среде mongo при использовании оператора $ text. Я получаю результаты назад, когда я этого не ожидаю. Я ожидаю, что строка ABCD будет соответствовать, но нет записей, содержащих ACBDE. индекс дикой карты для текста определен («$ **»: текст)

Как вы можете видеть в объяснении, анализируемый текстовый запрос изменяет то, что у меня есть в $ search. Какие-нибудь идеи о том, что может происходить?

> db.catalogentries.find({$text: {$search: 'abcde'}}).pretty().explain() 
{ 
     "queryPlanner" : { 
       "plannerVersion" : 1, 
       "namespace" : "test.catalogentries", 
       "indexFilterSet" : false, 
       "parsedQuery" : { 
         "$text" : { 
           "$search" : "abcde", 
           "$language" : "english", 
           "$caseSensitive" : false, 
           "$diacriticSensitive" : false 
         } 
       }, 
       "winningPlan" : { 
         "stage" : "TEXT", 
         "indexPrefix" : { 

         }, 
         "indexName" : "$**_text", 
         "parsedTextQuery" : { 
           "terms" : [ 
             "abcd" 
           ], 
           "negatedTerms" : [ ], 
           "phrases" : [ ], 
           "negatedPhrases" : [ ] 
         }, 
         "inputStage" : { 
           "stage" : "TEXT_MATCH", 
           "inputStage" : { 
             "stage" : "TEXT_OR", 
             "inputStage" : { 
               "stage" : "IXSCAN", 
               "keyPattern" : { 
                 "_fts" : "text", 
                 "_ftsx" : 1 
               }, 
               "indexName" : "$**_text", 
               "isMultiKey" : true, 
               "isUnique" : false, 
               "isSparse" : false, 
               "isPartial" : false, 
               "indexVersion" : 1, 
               "direction" : "backward", 
               "indexBounds" : { 

               } 
             } 
           } 
         } 
       }, 
       "rejectedPlans" : [ ] 
     }, 
     "serverInfo" : { 
       "host" : "mongo01", 
       "port" : 27017, 
       "version" : "3.2.4", 
       "gitVersion" : "e2ee9ffcf9f5a94fad76802e28cc978718bb7a30" 
     }, 
     "ok" : 1 
} 

Следует также отметить, что если при поиске ACBDF, ABCDD или ABC, что я не получаю никаких результатов, как и ожидалось.

+0

Благодаря JohnnyHK! Похоже, что я решил проблему. –

ответ

0

Если ваш поисковый запрос не является фактическим словом, вы должны добавить $language: 'none' к вашему запросу, чтобы отключить слово stemming, что может привести к неожиданным результатам, подобным этому.

Таким образом изменить ваш запрос:

db.catalogentries.find({$text: {$search: 'abcde', $language: 'none'}})