Wat is de beste manier van zoekindexatie?
Ik zag Solr, Lucene, Elastic Search en Sphinx al langskomen.
Mijn eisen zijn: Lightweight, filters ingebouwd, niet teveel geheugen verbruik, code wordt onderhouden, en via PHP benaderbaar (zijn ze allemaal wel).
Wat zou jullie advies zijn?
Gewijzigd op 27/01/2023 21:55:42 door - Ariën -
Een database zou juist alles moeten kunnen, t/m in memory aan toe.
Maar misschien heb je een bijzondere toepassing?
Ik wil er eerst eens mee experimenteren, en mogelijk met een kopie van mijn database met ruim 9k aan nieuwsberichten.
Gewijzigd op 28/01/2023 21:50:18 door - Ariën -
Iemand nog wat ervaringen met de genoemde tools?
- Postgres: https://www.postgresql.org/docs/current/textsearch-indexes.html
- MySQL: https://dev.mysql.com/doc/refman/8.0/en/mysql-indexes.html
En 9k aan artikelen is best weinig, op het eerste gezicht is het niet de tijdsinvestering waard om daar externe tools voor te gebruiken, vooral als je de data al in een database hebt staan.
Klinkt raar.....
Zoals ik al zei: Ik wil ermee experimenteren, en was benieuwd naar ervaringen. Of ik het in productie gebruik , en op wat voor manier, is een volgende beslissing.
Gewijzigd op 02/02/2023 10:05:29 door - Ariën -
Mijn ervaring is dat databases voldoende snel zijn om aan je behoefte te voldoen zoals je die hebt omschreven:
- Lightweight (kost niets extra's bovenop de database die je toch al hebt)
- filters ingebouwd (WHERE statement)
- niet teveel geheugen verbruik
- code wordt onderhouden
- via PHP benaderbaar (zijn ze allemaal wel)
Zelf heb ik nooit de behoefte gehad om met nog meer externe tools te experimenteren. Er is wel meer info over te vinden via SO en dan kom je er al snel achter wat de nadelen zijn van Lucene, dat ElasticSearch niet lichtgewicht is, Solr voortborduurt op Lucene/ElasticSearch. De eerste om uit te proberen wordt dan Sphinx.
Voordat ik zoiets zou doen zou ik me eerst verdiepen in alle zoekmogelijkheden van je database. Al was het maar om de externe tool mee te kunnen vergelijken voor het experiment. SQL gaat veel verder dan WHERE en LIKE, daarover meer in dit artikel. Je kunt bijvoorbeeld ook fuzzy zoeken en ranking toepassen, en wanneer je de juiste indices aanbrengt is het enorm snel. Je kunt de data op schijf houden, of in een in-memory MATERIALIZE VIEW.
Met MySQL kan je net wat minder. Je kunt wel full text searches doen, met ranking ook. Maar fuzzy searches worden nog niet ondersteund.
Het is vrij waarschijnlijk dat wanneer je zou overgaan op een geavanceerdere database dan MySQL/MariaDB, je meer mogelijkheden hebt waarmee je ruimschoots uit de voeten zou kunnen. Ik ben benieuwd naar je testresultaten van wat een externe zoekmachine-tool daar nog aan toe kan voegen.
Ik had al op een test VPS'je al ElasticSearch geprobeerd, maar dat had niet voldoende aan 2GB. Ik ga de andere mogelijkheden eens proberen.