嵌入式对象内部的MongoDB全文搜索

编辑。_

这是我的样本数据

{
    _id: 123123123,
    author:{
     name : "username"
    },
    data:{
     title : "Hello World"
    }
}

这是我的Index命令: db.post.createIndex({"data.title":"text"})

但是当我执行死刑时,我db.post.find( { $text: { $search: "Hello" } } )什么也得不到。

我应该运行什么命令来索引mongodb中的嵌入对象?

涂鸦

db.post.createIndex({"data.title":"text"})是在嵌入式字段上创建文本索引的正确命令。

db.post.find( { $text: { $search: "Hello" } } )是使用文本索引Hello在嵌入字段中搜索值的正确方法data.title

您做的一切正确。为了验证这一点,我已经采取了你的文档,将其写入到一个集合,使用创建上收集文本索引createIndex()您提供和使用搜索它命令find()你提供的与该文档的命令返回。

因此,问题可能出在其他地方。我建议你:

  • 确认文本索引已明确创建。您可以通过运行来执行此操作db.post.getIndexes(),如果文本索引存在并且确实覆盖了data.title,那么您应该在该命令的输出中看到类似以下内容:

    {
        "v" : 2,
        "key" : {
            "_fts" : "text",
            "_ftsx" : 1
        },
        "name" : "data.title_text",
        "ns" : "<your database name>.post",
        "weights" : {
            "data.title" : 1
        },
        "default_language" : "english",
        "language_override" : "language",
        "textIndexVersion" : 3
    }
    
  • 确认肯定有一个data.title包含的文档Hello您可以通过运行一个简单的find来做到这一点db.post.find({'data.title': { $regex: /Hello/ } })

  • 确认以下命令:db.post.find( { $text: { $search: "Hello" } } ) 绝对使用您的文本索引。您可以通过使用.explain()(例如db.post.find( { $text: { $search: "Hello" } } ).explain()调用该命令来执行此操作,并且输出应包含以下内容:

        "inputStage" : {
            "stage" : "TEXT_MATCH",
            "inputStage" : {
                "stage" : "TEXT_OR",
                "inputStage" : {
                    "stage" : "IXSCAN",
                    "keyPattern" : {
                        "_fts" : "text",
                        "_ftsx" : 1
                    },
                    "indexName" : "data.title_text",
                    "isMultiKey" : true,
                    "isUnique" : false,
                    "isSparse" : false,
                    "isPartial" : false,
                    "indexVersion" : 2,
                    "direction" : "backward",
                    "indexBounds" : {}
                }
            }
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章