sql >> Database >  >> NoSQL >> MongoDB

MongoDB fulltext zoeken + tijdelijke oplossing voor gedeeltelijke woordovereenkomst

Taalafstemming in tekst zoeken gebruikt een algoritme om woorden te relateren die zijn afgeleid van een gemeenschappelijke basis (bijv. "running" moet overeenkomen met "run"). Dit verschilt van de prefix-overeenkomst (bijv. "blauw" die overeenkomt met "blueberry") die u wilt implementeren voor een functie voor automatisch aanvullen.

Om typeahead.js het meest effectief te gebruiken met MongoDB tekst zoeken zou ik willen voorstellen om te focussen op de prefetch ondersteuning bij typeahead:

  • Maak een keywords verzameling die de gebruikelijke woorden (misschien met gebruiksfrequentietelling) heeft die in uw verzameling worden gebruikt. U kunt deze verzameling maken door een Map/Reduce uit te voeren in de hele collectie waarop u de tekstzoekindex hebt, en houd de woordenlijst up-to-date met behulp van een periodieke Incremental Map/Reduce wanneer nieuwe documenten worden toegevoegd.

  • Laat uw applicatie een JSON-document genereren op basis van de keywords verzameling met de unieke zoekwoorden (misschien beperkt tot 'populaire' zoekwoorden op basis van woordfrequentie om de lijst overzichtelijk/relevant te houden).

U kunt vervolgens de gegenereerde JSON-zoekwoorden gebruiken voor automatisch aanvullen aan de clientzijde met prefetch van typeahead functie:

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

typeahead.js slaat de prefetch in de cache op JSON-gegevens in localStorage voor zoekopdrachten aan de clientzijde. Wanneer het zoekformulier is ingediend, kan uw aanvraag de server-side MongoDB gebruiken tekst zoeken om de volledige resultaten in volgorde van relevantie te retourneren.



  1. Gegevens opvragen uit MongoDB met GraphQL in Django:Get-Go (1)

  2. Redis:Hoe kan ik een normale set doorsnijden met een gesorteerde set?

  3. Mangoest sorteren op ingevuld veld

  4. Kan ik een csv-bestand in een Mongo Shell Javascript-bestand lezen?