Hallo ich benutze mongoose um nach Personen in meiner Sammlung zu suchen.Mungo-Textsuche mit Teilstring
/*Person model*/
{
name: {
first: String,
last: String
}
}
Jetzt möchte ich für Personen mit einer Abfrage suchen:
let regex = new RegExp(QUERY,'i');
Person.find({
$or: [
{'name.first': regex},
{'name.last': regex}
]
}).exec(function(err,persons){
console.log(persons);
});
Wenn ich für suchen John i Ergebnisse erhalten (event, wenn ich für Jo suchen). Aber wenn ich nach John Doe suche, bekomme ich offensichtlich keine Ergebnisse.
Wenn ich QUERY zu John ändern | Doe i Ergebnisse zu erhalten, aber es gibt alle Personen, die entweder John oder Doe in ihrer letzt/Vornamen haben.
Das nächste, was war mit Mungo TEXTSUCHE, um zu versuchen:
Erste Felder hinzufügen zu indizieren:
PersonSchema.index({
name: {
first: 'text',
last: 'text'
}
},{
name: 'Personsearch index',
weights: {
name: {
first : 10,
last: 10
}
}
});
Dann ändern Sie die Person query:
Person.find({
$text : {
$search : QUERY
}
},
{ score:{$meta:'textScore'} })
.sort({ score : { $meta : 'textScore' } })
.exec(function(err,persons){
console.log(persons);
});
Dies funktioniert gut! Aber jetzt ist es nur wiederkehrende Personen, die mit dem ganzen Vor-/Nachname entsprechen:
->John kehrt Wert
->Jo kehrt kein Wert
Gibt es eine Möglichkeit um das zu lösen?
Antworten ohne externe Plugins sind bevorzugt, aber andere sind auch gewünscht.
Möglicherweise müssen Sie Elasticsearch dafür verwenden. Ich kann Ihnen einen detaillierten Code zur Verfügung stellen, wenn Sie möchten. Um die vollständige Namenssuche zu erhalten, sollten Sie die Abfrage im \ "query \ format \" ablegen. –
Eine Teilsuche mit nur Mungo funktioniert nicht. Ich habe es 3 Tage lang versucht, bevor ich mich für Elastic entschieden habe. –
Danke für den Hinweis, aber Elastiq scheint für diesen Fall ein bisschen zu viel zu sein. Wenn es eine Möglichkeit gäbe, den Vor- und Nachnamen in ein Feld zusammenzufassen (nur für eine Abfrage) und dann mit regex zu suchen, würde es dies tun. Aber ich bin mir nicht sicher, ob Mungo das kann? – Carsten