Mongoose - Частичный поиск невозможен даже с текстовым индексом - PullRequest
0 голосов
/ 11 октября 2019

Мое экспресс-приложение должно выполнять частичный поиск.

Моя модель объекта:

var mongoose = require("mongoose");

var subjectschema = new mongoose.Schema({
    Subject_Name: String,
    Subject_DOB: Date,
    Subject_Address: String,
    Subject_City: String,
    Subject_Prov: String,
    Subject_zip: String,
    Subject_Country: String
},{ strict: false });

subjectschema.index({ Subject_Name: "text" })

module.exports = mongoose.model("subject", subjectschema);

Мой маршрут поиска (POST):

router.post("/visit", middleware.isLoggedin, function(req,res){
    var text = req.body.user;
    subject.find({ $text:{$search: text}}).sort('Visit_date').exec(function(err,returnedsubjects){
        if(err){
            console.log(err);
        } else {
            console.log(returnedsubjects);
            res.render("visit",{returnedsubjects: returnedsubjects});
        }
    });
});

Имя_убъекта в MongoDB - "Стивен Смит" * Мой поиск не чувствителен к регистру (Большой!). Можно искать «Стивен» или «Стивен». * Я могу сделать частичные полные слова. Можно искать «Стивен» или «Смит»

Но если я найду «Стив» или «Сте», я подумал, что найдет запись. Но это не так.

Как мне выполнить поиск?

Спасибо!

1 Ответ

0 голосов
/ 11 октября 2019

текстовые индексы Монго не поддерживают частичный или нечеткий поиск. https://docs.mongodb.com/manual/text-search/

Думайте об этом как о поиске по ключевым словам. Вы можете использовать регулярное выражение, которое не рекомендуется, поскольку оно не использует индексы и выполнит полное сканирование коллекции.

ElasticSearch - это более оптимизированная база данных для поиска строк.

Или вы можете использовать Algolia https://www.algolia.com/

...