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つの」テキストクエリ文字列に入れて、複数のフィールドを検索します。