Mongodb-text-search

提供:Dev Guides
移動先:案内検索

MongoDB-テキスト検索

バージョン2.4から、MongoDBは文字列コンテンツ内を検索するためのテキストインデックスのサポートを開始しました。 テキスト検索*は、ステミングテクニックを使用して、 a、an、the、*などのステミングストップワードをドロップすることにより、文字列フィールドで指定されたワードを検索します 現在、MongoDBは約15の言語をサポートしています。

テキスト検索を有効にする

当初、テキスト検索は実験的な機能でしたが、バージョン2.6以降、デフォルトで構成が有効になっています。

テキストインデックスの作成

投稿テキストとそのタグを含む posts コレクションの下の次のドキュメントを検討してください-

> db.posts.insert({
   "post_text": "enjoy the mongodb articles on finddevguides",
   "tags": ["mongodb", "finddevguides"]
}
{
    "post_text" : "writing tutorials on mongodb",
    "tags" : [ "mongodb", "tutorial" ]
})
WriteResult({ "nInserted" : 1 })

post_textフィールドにテキストインデックスを作成して、投稿のテキスト内を検索できるようにします-

>db.posts.createIndex({post_text:"text"})
{
    "createdCollectionAutomatically" : true,
    "numIndexesBefore" : 1,
    "numIndexesAfter" : 2,
    "ok" : 1
}

テキストインデックスの使用

post_textフィールドにテキストインデックスを作成したので、テキストに finddevguides という単語が含まれるすべての投稿を検索します。

> db.posts.find({$text:{$search:"finddevguides"}}).pretty()
{
    "_id" : ObjectId("5dd7ce28f1dd4583e7103fe0"),
    "post_text" : "enjoy the mongodb articles on finddevguides",
    "tags" : [
        "mongodb",
        "finddevguides"
    ]
}

上記のコマンドは、投稿テキストに finddevguides という単語を含む次の結果ドキュメントを返しました-

{
   "_id" : ObjectId("53493d14d852429c10000002"),
   "post_text" : "enjoy the mongodb articles on finddevguides",
   "tags" : [ "mongodb", "finddevguides" ]
}

テキストインデックスの削除

既存のテキストインデックスを削除するには、最初に次のクエリを使用してインデックスの名前を見つけます-

>db.posts.getIndexes()
[
    {
        "v" : 2,
        "key" : {
            "_id" : 1
        },
        "name" : "_id_",
        "ns" : "mydb.posts"
    },
    {
        "v" : 2,
        "key" : {
            "fts" : "text",
            "ftsx" : 1
        },
        "name" : "post_text_text",
        "ns" : "mydb.posts",
        "weights" : {
            "post_text" : 1
        },
        "default_language" : "english",
        "language_override" : "language",
        "textIndexVersion" : 3
    }
]
>

上記のクエリからインデックスの名前を取得したら、次のコマンドを実行します。 ここで、 post_text_text はインデックスの名前です。

>db.posts.dropIndex("post_text_text")
{ "nIndexesWas" : 2, "ok" : 1 }