readme-ntnu / readme-arkiv

Artikkelsøk for readme
https://readme-arkiv.web.app
2 stars 0 forks source link

Bruke Algolia for fritekstsøk #1

Closed draperunner closed 3 years ago

draperunner commented 5 years ago

Firebase anbefaler å bruke ein eigen søkemotor for å kunne søke i Firestore-databasen, og har Algolia som eksempel her: https://firebase.google.com/docs/firestore/solutions/search

Algolia har ein gratis community-versjon man kan bruke.

AndreasHaaversen commented 5 years ago

Forsøkte å implementere dette, men det viste seg å ikke være mulig så lenge vi er på Firebase sin gratisplan. Firebase blokker alle outbound requests til tredjeparts API-er med den planen.

draperunner commented 5 years ago

Ah, stemmer... :(

draperunner commented 5 years ago

Eg trur generelt Firebase (egentlig databasen Firestore) er ein dårlig match for denne applikasjonen. Firestore har null støtte for full text search, ikkje ein gang regex- eller LIKE-queries...

Heroku tilbyr PostgreSQL-database i sin gratisplan. Postgres støttar tekstsøk. Det kan vere verdt å sjekke det ut, sjølv om å migrere databasen til SQL kan vere litt kjedelig.

AndreasHaaversen commented 5 years ago

Ja, det kan virke sånn.

Heroku kan være et godt alternativ. Utfordringen der igjen er at serveren går i dvale om nettsiden ikke vises på en halvtime. Jeg er også litt usikker på om databasen databasen er stor nok. Vi får bare 10 000 rader i databasen med gratisplanen, men det er meget mulig jeg litt overdrevne tanker om hvor stor artikkeldatabasen egentlig er 😅

draperunner commented 5 years ago

Dvalen kan vere litt kjip, men det går an å pinge den jevnlig med f.eks. https://cron-job.org/en/ for å halde den oppe. Eller berre tåle treig oppstartstid innimellom.

Angåande lagringsplass kan me jo gjere litt enkel matte. Det er 28 sider i ein utgave. La oss runde opp sjenerøst til at det blir maks. 50 rader per utgave. Med 10k rader kan man då ha 200 utgaver. 6 utgåver i året gir at det er plass til minimum 33,3 år med readme. Det burde holde lenge. :)

AndreasHaaversen commented 5 years ago

Da virker det som en god løsning!

Det er kanskje litt jobb å få alt over, men det skal nok gå seg til.

draperunner commented 5 years ago

MongoDB Atlas har 512 MB lagringspass gratis. Går an å prøve det. Då er det berre å laste opp MongoDB-dumpen som ligg i repoet her. https://www.mongodb.com/cloud/atlas Backenden kan fortsatt vere i Firebase, eller det går an å prøve Heroku eller f.eks. https://zeit.co/

AndreasHaaversen commented 5 years ago

Det kan fungere det og, men jeg tror kanskje det er enda enklere å bare gå opp til Blaze-planen til Firebase. Med den bruken denne nettsiden får, vil det også for det meste være gratis. Dersom ulykken er ute er grensene, såvidt som jeg kan se, såpass generøse at det i verste fall er snakk om et par dollar.

Det er ihvertfall det jeg får ut av denne kalkulatoren og bruksstatistikken på appen slik den er i dag.

Jeg troooor vi skal klare å snike det inn i budsjettet til readme på en eller annen måte.

draperunner commented 5 years ago

Pass på at bugs i koden kan bli veldig dyre.

AndreasHaaversen commented 5 years ago

Jeg har pusla litt mer med dette i dag, og oppdaget følgende: Alle utgavene mellom 2001 og 2013 ligger inne i databasen som hver enkeltstående artikler, dvs. alle artiklene i hver av de utgavene ligger inne i samme databasedokument. Dette betyr at de er for store til å indekseres av Algolia. Maksgrensen der er 10kb pr. indeks. Mange av disse dokumentene det er snakk om er nesten 10 ganger større enn det.

Det betyr at dersom vi fortsatt vil bruke Algolia, uavhening av hvilken backend vi lander på, må vi splitte opp de utgavene som nå ligger inne som en stor artikkel. Det er da snakk om så mange som 70 (!) utgaver som må legges inn på nytt.

Jeg foreslår heller at vi beholder dagens arkitektur, ihvertfall inntill videre. Jeg foreslår også å flytte søket slik at det kjører clientside istedenfor på Cloud-functions. Da kan vi sørge for en kraftig reduksjon i antall reads fra databasen ved å hente alle artiklene kun en gang når brukeren åpner nettsiden for første gang, istedenfor å gjøre det hver gang man søker etter noe.

Fuse.js har, så vidt jeg kan se, en viss støtte for fulltekstsøk. Det finnes også alternativer vi kan erstatte den med, dersom vi ønsker oss bedre støtte for det.

AndreasHaaversen commented 4 years ago

Dettee kan sees på igjen, siden prosjektet nå er på en Blaze-plan! 🎉

Jeg tenker å gjøre et nytt forsøk på dette, eller en tilsvarende løsning. Tror det vil gjøre søkeopplevelsen enda bedre.

AndreasHaaversen commented 3 years ago

Vi er nå oppe og nikker med et Algolia-basert søk :rocket: https://readme.abakus.no/search

draperunner commented 3 years ago

Rått! Utrulig snappy søk. 🚀