因此,当使用$ text运算符时,我在mongo环境中遇到了一些奇怪的行为。当我没有期待时,我得到了结果。我希望字符串ABCD匹配,但没有包含ACBDE的条目。定义文本的通配符索引('$ **':text)
正如您在解释中所看到的,解析后的文本查询正在修改$ 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 :(得分:0)
如果您的搜索字词不是实际字词,那么您应该在查询中添加$language: 'none'
以禁用可能导致意外结果的词干,
因此请将您的查询更改为:
db.catalogentries.find({$text: {$search: 'abcde', $language: 'none'}})