MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Volltextsuche + Problemumgehung für teilweise Wortübereinstimmung

Sprachstammbildung in der Textsuche verwendet einen Algorithmus, um zu versuchen, Wörter in Beziehung zu setzen, die von einer gemeinsamen Basis abgeleitet sind (z. B. sollte „laufen“ mit „laufen“ übereinstimmen). Dies unterscheidet sich von der Präfixübereinstimmung (z. B. "blau" passt zu "blaubeere"), die Sie für eine Autovervollständigungsfunktion implementieren möchten.

Um typeahead.js am effektivsten zu verwenden Bei der MongoDB-Textsuche würde ich vorschlagen, sich auf den prefetch zu konzentrieren Unterstützung beim Vervollständigen:

  • Erstellen Sie ein keywords Sammlung, die die in Ihrer Sammlung verwendeten gebräuchlichen Wörter (möglicherweise mit Nutzungshäufigkeit) enthält. Sie könnten diese Sammlung erstellen, indem Sie ein Map/Reduce ausführen In der gesamten Sammlung haben Sie den Textsuchindex aktiviert und halten die Wortliste mit einem regelmäßigen Inkrementelles Zuordnen/Reduzieren wenn neue Dokumente hinzugefügt werden.

  • Lassen Sie Ihre Anwendung ein JSON-Dokument aus den keywords generieren Sammlung mit den eindeutigen Schlüsselwörtern (möglicherweise beschränkt auf "beliebte" Schlüsselwörter basierend auf der Worthäufigkeit, um die Liste überschaubar/relevant zu halten).

Sie können dann die JSON-generierten Schlüsselwörter für die clientseitige automatische Vervollständigung mit dem prefetch von typeahead verwenden Funktion:

$('.mysearch .typeahead').typeahead({
  name: 'mysearch',
  prefetch: '/data/keywords.json'
});

typeahead.js wird den prefetch zwischenspeichern JSON-Daten in localStorage für clientseitige Suchen. Wenn das Suchformular gesendet wird, kann Ihre Anwendung die serverseitige MongoDB verwenden Textsuche um die vollständigen Ergebnisse in der Reihenfolge ihrer Relevanz zurückzugeben.