Zoekmodule in mijn eigen CMS

Alles over programmeren en development binnen de IT-wereld
Plaats reactie
Gebruikersavatar
Goztow
Administrator
Administrator
Berichten: 15183
Lid geworden op: 14 nov 2006, 16:21
Locatie: Brussel
Uitgedeelde bedankjes: 1687 keer
Bedankt: 1484 keer
Recent bedankt: 8 keer
Provider
Te Koop forum

Ik heb een eigen CMS geschreven in PHP en zoek momenteel naar een methode om een soort van zoekmachine te incorporeren. Ik weet dat er nogal veel goede dingen bestaan de dag van vandaag en voel er weinig voor om zelf het warm water opnieuw uit te vinden. Enkele slimmerikken zullen hetzelfde beweren voor CMS, maar als je die zelf schrijft, kan je die ook zelf makkelijk aanpassen aan specifieke behoeften ;).

Anyway, dit is de situatie:
* de user voegt artikels toe in zijn CMS via een WYSWYG (achterliggende mysql database). Voor het ogenblik voert hij geen trefwoorden in. Dit zou eventueel kunnen maar wil ik het liefst vermijden.
* de user kan ook documenten toevoegen in bepaalde onderdelen. Dit is min of meer zo: publicatie in PDF, titel, omschrijving, trefwoorden. Hier kan dus op de trefwoorden worden gezocht, wat me het best lijkto m te vermijden dat alle pdf's worden doorzocht.
* het liefst ook iets van "xx % overeenkomst" en gerangschikt op % overeenkomst.

Het vervelende van de google API is dat je een google logo krijgt op je website, wat ik persoonlijk niet wens. Ik wens iets overzichtelijk, pertinent, makkelijk te gebruiken en het liefst in PHP.

Ik ben er zeker van dat anderen al op dit probleem gestoot zijn, alle hulp is welkom!
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 434 keer
Bedankt: 1972 keer

Gewoon een SQL met een WHERE LIKE '%...%' ?

Alles hangt er een beetje vanaf hoe krachtig je query expressie moet zijn.
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16757
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 582 keer
Bedankt: 780 keer
Provider

MySQL: MATCH AGAINST: http://dev.mysql.com/doc/refman/5.0/en/ ... earch.html

Als je IN documenten gaat willen zoeken ga je die moeten indexeren. Dat betekent een soort iFilter-achtige oplossing nodig hebben om documenten te kunne parsen.
Je kan eens kijken of Apache Lucene een oplossing is? http://lucene.apache.org
Gebruikersavatar
Goztow
Administrator
Administrator
Berichten: 15183
Lid geworden op: 14 nov 2006, 16:21
Locatie: Brussel
Uitgedeelde bedankjes: 1687 keer
Bedankt: 1484 keer
Recent bedankt: 8 keer
Provider
Te Koop forum

Ik ken deze MySQL-queries en zou inderdaad zelf kunnen een module schrijven. Ik zocht echter naar iets dat bestaat, dat reeds meer uitgewerkt is naar gebruiksvriendelijkheid en pertinentie van resultaten toe. ik beschouw het als een WYSWYG-module: die creëer ik ook niet zelf als er al een goeie bestaat ;).

Toch alvast bedankt en ik hoop op nog meer feedback :).
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16757
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 582 keer
Bedankt: 780 keer
Provider

Match against doet doe precies wat jij vraagt? Sorteren naar relevantie, een getal geven hoe relevant het resultaat is, je hoeft geen trefwoorden te gebruiken, ...
Als je bovendien een manier vindt om een document naar plain text te converteren en op die manier ook in de DB te krijgen kan je ook daar je mysql fulltext-search op loslaten.
Gebruikersavatar
Goztow
Administrator
Administrator
Berichten: 15183
Lid geworden op: 14 nov 2006, 16:21
Locatie: Brussel
Uitgedeelde bedankjes: 1687 keer
Bedankt: 1484 keer
Recent bedankt: 8 keer
Provider
Te Koop forum

OK Meon, ik ga het verder bekijken :). Nogmaasl bedankt! ;)
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16757
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 582 keer
Bedankt: 780 keer
Provider

Ja, ik heb het zelf gebruikt in een eigen cms, vandaar dat ik dat weet :).

Zal eens kijken hoe m'n code er uit zag, site is helaas niet meer in de lucht. (dat wordt zoeken!)
Gebruikersavatar
Goztow
Administrator
Administrator
Berichten: 15183
Lid geworden op: 14 nov 2006, 16:21
Locatie: Brussel
Uitgedeelde bedankjes: 1687 keer
Bedankt: 1484 keer
Recent bedankt: 8 keer
Provider
Te Koop forum

Dat zou leuk zijn :). We moeten elkaar af en toe een handje kunnen helpen, hé :$.
marcovanschagen
Starter
Starter
Berichten: 2
Lid geworden op: 31 maa 2010, 14:12

Hoi, ik heb in detail gewerkt met iFilters.
Het is iets dat lang geleden door Microsoft is bedacht, en sinds ca 1998 in veel producten zit als search & indexing. In veel andere CMS systemen is dit gebruikt. Verschillende leveranciers hebben een iFilter beschikbaar gesteld voor hun bestandsformaat. iFilter is in principe een COM object in een dll.
Er is code te schrijven om zulke iFilters direct aan te spreken, maar ze zijn bedoeld om makkelijk middels configuratie toe te voegen aan een vorm van microsoft Search, SQL server, SharePoint, volgens mijn ook aan IIS; als het maar een versie is ouder dan 1998. Veel iFilters werken echter niet als 64 bit versie, en zullen last hebben met windows 2008++.

Wat er gebeurt: Je bied een bestand aan, dat uiteindelijk door de juiste iFilter wordt opgepakt. het iFilter doet wat hij doen moet om alle searchable tekst te verzamelen uit de file, en presenteert het resultaat in tekst blokken terug aan de code.
Op een windows systeem zijn de iFilters voor office documenten makkelijk toe te voegen. Voor PDF zal je een en ander moeten lezen. Kies voor een 32 bit windows.

Om dit te gebruiken is het het makkelijkste als je de microsoft onderdelen aan kan spreken zodat de verdere details met het iFilter voor je geregeld worden. Makkelijkste manier is SQL server te nemen als database, FTS Full Text Search aan te zetten, tabel te maken met in ieder geval een kolom waar je de file content binair ingooit plus een kolom om filetype aan te geven. Indien filetype herkend wordt zal 'vanzelf' het iFilter worden gebruikt om de tekst te indexeren. Lastige materie, je moet je even goed inlezen, en zet zeker even een testserver op. Als het werkt is het geweldig.

Succes!
ubremoved_539
Deel van't meubilair
Deel van't meubilair
Berichten: 29849
Lid geworden op: 28 okt 2003, 09:17
Uitgedeelde bedankjes: 434 keer
Bedankt: 1972 keer

Dat zijn wel een heleboel voorwaarden hé...

- Windows OS (maar geen 2008)
- 32 bit
- iFilter vinden
- MS SQL

... niet echt evident voor de meeste PHP hostings.
marcovanschagen
Starter
Starter
Berichten: 2
Lid geworden op: 31 maa 2010, 14:12

Precies.
Kijk eens of er een oplossing of adapter is voor een PHP omgeving? Zou erg interessant zijn, ik kan mij voorstellen dat COM objecten stiekem toch gebruikt kunnen worden?
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16757
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 582 keer
Bedankt: 780 keer
Provider

COM zit in de Windows API en zijn derhalve misschien via WINE beschikbaar. Ik denk niet dat dat een haalbare denkpiste is.
Enfin ja, iFilter kan je vergeten. Kijk of je open source word, pdf, excel, openxml (office 2007), opendocument (OpenOffice) - to text kan vinden...
Voor Excel 2007 weet ik http://phpexcel.codeplex.com/ bvb.
Plaats reactie

Terug naar “Development”