Khái niệm "tìm kiếm văn bản" trong mongodb không hoạt động như vậy. Thay vào đó, khái niệm ở đây là bạn xác định "nhiều trường" trong "chỉ mục văn bản" của bạn và chỉ cần tìm kiếm các thuật ngữ.
Giả sử bạn có "thứ" như thế này:
{ "_id" : ObjectId("55ba22294bde97b581332979"), "title" : "Hello there" },
{ "_id" : ObjectId("55ba22414bde97b58133297a"), "title" : "Hello world" },
{
"_id" : ObjectId("55ba22594bde97b58133297b"),
"title" : "Hello world",
"suburb" : "melbourne"
}
Sau đó, tôi quyết định tạo một chỉ mục văn bản như sau:
db.junk.createIndex(
{ "title": "text", "suburb": "text" },
{ "weights": { "title": 10 } }
)
Sau đó, tôi thực hiện tìm kiếm bằng cách sử dụng $ text
:
db.junk.find(
{ "$text": { "$search": "Hello World Melbourne" } },
{ "score": { "$meta": "textScore" } }
).sort({ "score": { "$meta": "textScore" } })
Điều này mang lại kết quả:
{
"_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
}
"Cả hai" nào tìm kiếm trên tất cả các trường được chỉ định trong chỉ mục và cũng xem xét "trọng số" bổ sung như được cung cấp cho trường "vùng ngoại ô" trong trường hợp này để làm cho nó trở thành một thứ hạng phổ biến hơn.
Vì vậy, bạn không sử dụng điều kiện bổ sung cho các cụm từ, bạn đặt "tất cả" các cụm từ trong chuỗi truy vấn văn bản "một" để tìm kiếm trên nhiều trường.