sql >> データベース >  >> NoSQL >> MongoDB

Mongodbテキストは複数のフィールドを検索します

    mongodbの「テキスト検索」の概念はそのようには機能しません。代わりに、ここでの概念は、"テキストインデックス"で「複数のフィールド」を定義することです。 用語を検索するだけです。

    次のような「もの」があるとしましょう:

    { "_id" : ObjectId("55ba22294bde97b581332979"), "title" : "Hello there" },
    { "_id" : ObjectId("55ba22414bde97b58133297a"), "title" : "Hello world" },
    {
        "_id" : ObjectId("55ba22594bde97b58133297b"),
        "title" : "Hello world",
        "suburb" : "melbourne"
    }
    

    次に、次のようなテキストインデックスを作成することにしました。

    db.junk.createIndex(
       { "title": "text", "suburb": "text" },
       { "weights": {  "title": 10 } }
    )
    

    次に、 $text

    db.junk.find(
       { "$text": { "$search": "Hello World Melbourne" } },
       { "score": { "$meta": "textScore" } }
    ).sort({ "score": { "$meta": "textScore" } })
    

    結果が得られます:

    {
        "_id" : ObjectId("55ba22594bde97b58133297b"),
        "title" : "Hello world",
        "suburb" : "melbourne",
        "score" : 11.5
    },
    {
        "_id" : ObjectId("55ba22414bde97b58133297a"),
        "title" : "Hello world",
        "score" : 1.5
    },
    {
        "_id" : ObjectId("55ba22294bde97b581332979"),
        "title" : "Hello there",
        "score" : 1
    }
    

    どちらの「両方」がインデックスで指定されたすべてのフィールドを検索し、この場合は「郊外」フィールドに追加された「重み」を考慮して、さらに人気のあるランキングにします。

    したがって、用語に追加の条件を使用するのではなく、「すべて」の用語を「1つの」テキストクエリ文字列に入れて、複数のフィールドを検索します。



    1. MongooseはデータをMongoDBに保存しません

    2. mongoengine+django同じコンテンツのアイテムの数を数える方法

    3. python / bcryptを使用して、ユーザーコレクションのmongodbにソルトハッシュとしてパスワードを保存します

    4. mongoTemplateを使用してMongodbコレクションのページ付けを実装するにはどうすればよいですか?