Archief - Algoritme (PHP): search engine voor forum

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

JohnBeton

Legacy Member
Ansur zei:
...dan zou er eerst naar A gezocht moeten worden ;)

Je kan mss de ingevoerde string parsen naar een SQL query en deze laten uitvoeren ofzo.
Neen, eerst naar "b OR c", want dat staat tussen haken ;)

En omzetten naar SQL where-clause is geen oplossing, zie hierboven

Ansur

Legacy Member
Haakjes zijn overbodig hier, want AND heeft voorrang op OR
A AND B OR C != (A AND B) OR C

(maar we gaan hier wat off-topic, so I'll shut it)

JohnBeton

Legacy Member
Haakjes dienen net om die volgorde te bepalen he...

A AND B OR C
=> in elke post moet zowel A als B voorkomen, of C

A AND (B OR C)
=> A moet voorkomen in elke post, en ook ofwel B ofwel C

killgore

Legacy Member
1 woordje over dat cachen: is bijna niet te doen, je moet dan namelijk alles toch terug updaten als je een nieuw bericht post.

Er is trouwens een ingebouwde cache-optie voor queries in mysql. Maar deze wordt natuurlijk weer leeggemaakt als je een INSERT of UPDATE of DELETE uitvoert :).

Beste oplossing imho is met hashes werken of die manier van phpBB (of die combineren). Is natuurlijk trager bij aanpassingen van de tables (elk woord moet apart ingevoegd worden. Maar de zoekfunctie zal des te sneller zijn ;).

md5 is btw niet een unieke hash voor elke tekst, ik betwijfel ook ten sterkste voor elk woord :).

JohnBeton

Legacy Member
killgore zei:
1 woordje over dat cachen: is bijna niet te doen, je moet dan namelijk alles toch terug updaten als je een nieuw bericht post.

Er is trouwens een ingebouwde cache-optie voor queries in mysql. Maar deze wordt natuurlijk weer leeggemaakt als je een INSERT of UPDATE of DELETE uitvoert :).

Beste oplossing imho is met hashes werken of die manier van phpBB (of die combineren). Is natuurlijk trager bij aanpassingen van de tables (elk woord moet apart ingevoegd worden. Maar de zoekfunctie zal des te sneller zijn ;).

md5 is btw niet een unieke hash voor elke tekst, ik betwijfel ook ten sterkste voor elk woord :).
Wat is de phpBB manier dan?

Op de manier die ik nu aan het uitwerken ben kan je makkelijk gewoon de "nieuwe" woorden toevoegen (in de nieuwe post dus).

Die Mysql caching had ik ook al bekeken, maar inderdaad totaal nutteloos voor een forum.

md5 is inderdaad niet altijd uniek, maar momenteel zit ik met grotere problemen.

EdMeister

Legacy Member
JohnBeton zei:
Wat is de phpBB manier dan?
Eventjes mezelf quoten, je leest blijkbaar selectief. ;)
EdMeister zei:
phpBB doet dit door lijsten van woorden bij te houden in zijn database. Het voordeel is dat het heel snel werkt, nadeel is uiteraard dat je database veel groter wordt.
Ik zou zeggen: kijk eens in de broncode van phpBB, installeer en draai dat forum desnoods lokaal en implementeer het systeem in je eigen forum.

JohnBeton

Legacy Member
EdMeister zei:
Eventjes mezelf quoten, je leest blijkbaar selectief. ;)
Ow ja


Wel, ik ben ondertussen de hash-weg ingeslagen. lijkt me zéér performant (zoeken op geïndexeerde getallen), met als enige nadeel inderdaad een grotere database. Eigenlijk is die hash-tabel dus ook een lijst van woorden, maar die woorden zijn dan omgezet in getallen.


Maar zoals ik al zei is de opslag ATM niet mijn grootste zorg meer, wel het uiteenrafelen van searchqueries :)
Alhoewel de meeste problemen al opgelost zijn.

Moest tussendoor iemand mij een betere hashing methode (die 100% unieke getallen oplevert) kunnen bezorgen, zou dat trouwens leuk zijn! ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan