mongodb发现$ text搜索查询已更改

时间:2016-05-31 17:07:19

标签: mongodb mongodb-query

因此,当使用$ 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,我得不到预期的结果。

1 个答案:

答案 0 :(得分:0)

如果您的搜索字词不是实际字词,那么您应该在查询中添加$language: 'none'以禁用可能导致意外结果的词干,

因此请将您的查询更改为:

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