Có, bạn có thể sử dụng tìm kiếm toàn văn trong Mongoose> =3.8.9. Thứ nhất, một tập hợp có thể có nhiều nhất một chỉ mục văn bản (xem tài liệu). Vì vậy, để xác định chỉ mục văn bản cho một số trường, bạn cần chỉ mục kết hợp:
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' });
Giờ đây, bạn có thể sử dụng $ text toán tử truy vấn như thế này:
Model
.find(
{ $text : { $search : "text to look for" } },
{ score : { $meta: "textScore" } }
)
.sort({ score : { $meta : 'textScore' } })
.exec(function(err, results) {
// callback
});
Điều này cũng sẽ sắp xếp kết quả theo điểm mức độ liên quan.
Đối với trọng số, bạn có thể thử chuyển đối tượng tùy chọn trọng số vào index()
phương thức (nơi bạn xác định chỉ mục kết hợp) (hoạt động ít nhất với v4.0.1 của mongoose):
schema.index({ animal: 'text', color: 'text', pattern: 'text', size: 'text' }, {name: 'My text index', weights: {animal: 10, color: 4, pattern: 2, size: 1}});