[MySQL/PHP] Opzetten van een zoeksysteem*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste,

Ik ben bezig een site te maken en wilde een search inbouwen, dit moet snel efficient en veilig werken. Weet er iemand een oplossing? Ik heb al een sql search met MATCH AGAINST uitgeprobeerd, maar we zijn erachter gekomen dat een full text search met MATCH AGAINST opzich wel oke is, maar als er meer dan 50% resultaten zijn showt hij niks meer. Overigens zou de search niet te belastend mogen zijn. Zijn er mogelijkheden om de site op geregelde tijdstippen te indexeren ?


Ik ben niet opzoek naar complete scripts maar meer naar hulp hoe wij dit het beste aan kunnen pakken of op welke manier, een duwtje in de goede richting is meer dan genoeg.

[ Voor 28% gewijzigd door Verwijderd op 15-04-2006 00:31 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

A natural language search interprets the search string as a phrase in natural human language (a phrase in free text). There are no special operators. The stopword list applies. In addition, words that are present in more than 50% of the rows are considered common and do not match. Full-text searches are natural language searches if no modifier is given.
en
The 50% threshold for natural language searches is determined by the particular weighting scheme chosen. To disable it, look for the following line in myisam/ftdefs.h:

#define GWS_IN_USE GWS_PROB


Change that line to this:

#define GWS_IN_USE GWS_FREQ


Then recompile MySQL. There is no need to rebuild the indexes in this case. Note: By making this change, you severely decrease MySQL's ability to provide adequate relevance values for the MATCH() function. If you really need to search for such common words, it would be better to search using IN BOOLEAN MODE instead, which does not observe the 50% threshold.
;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt:D Hoe doet tweakers het bijvoorbeeld met het zoeken? Kdenk dat jullie ook niet al te zwaar willen belasten maar jullie hebben wel veel om te doorzoeken.

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 17:05

orf

Ik vind een aparte zoektabel het beste werken. Met drie of vier kolommen:

record_id | zoekwoord | aantal | weging

Als bijvoorbeeld een nieuwsbericht wordt toegevoegd, dan gaat die tekst door een functie heen, die de woorden in de zoektabel zet, met het aantal keren dat het woord voorkwam in de tekst (array_count_values). Een titel krijgt dan een hogere weging dan de gewone tekst.

Zoeken is dan supersnel en je kunt sorteren op weging (alleen titel) en op aantal keren dat het woord voorkomt.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zaterdag 15 april 2006 @ 00:53:
Bedankt:D Hoe doet tweakers het bijvoorbeeld met het zoeken? Kdenk dat jullie ook niet al te zwaar willen belasten maar jullie hebben wel veel om te doorzoeken.
Alles wat ik zelf weet van onze zoekfunctie staat ook te lezen in Omega search manual en dan met name in dit stukje. :)
orf schreef op zaterdag 15 april 2006 @ 01:05:
Ik vind een aparte zoektabel het beste werken. Met drie of vier kolommen:

record_id | zoekwoord | aantal | weging

Als bijvoorbeeld een nieuwsbericht wordt toegevoegd, dan gaat die tekst door een functie heen, die de woorden in de zoektabel zet, met het aantal keren dat het woord voorkwam in de tekst (array_count_values). Een titel krijgt dan een hogere weging dan de gewone tekst.

Zoeken is dan supersnel en je kunt sorteren op weging (alleen titel) en op aantal keren dat het woord voorkomt.
Indexering is leuk, maar wat doe je als je wat meer geavanceerdere dingen wil doen, zoals het zoeken op combinaties van woorden of bijvoorbeeld stemming? Dat gaat je met zo'n indexeringstabel niet lukken. Je hebt dan wel een snelle manier om aan resultaten te komen, maar die resultaten zijn een stuk minder uitgebreid dan mogelijk is met andere methoden. ;)

[ Voor 53% gewijzigd door NMe op 15-04-2006 01:29 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor het duwen in de goede richting, ik ga hire nu mee aan de slag.

Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

-NMe- schreef op zaterdag 15 april 2006 @ 01:27:
Indexering is leuk, maar wat doe je als je wat meer geavanceerdere dingen wil doen, zoals het zoeken op combinaties van woorden of bijvoorbeeld stemming? Dat gaat je met zo'n indexeringstabel niet lukken. Je hebt dan wel een snelle manier om aan resultaten te komen, maar die resultaten zijn een stuk minder uitgebreid dan mogelijk is met andere methoden. ;)
Waarom zou je zo niet kunnen zoeken om combinaties van woorden?

Stemming kan trouwens gewoon; je gooit je stemmingsalgoritme natuurlijk vóór je je termen in de database gooit eroverheen.

Zelfs phrase search kan je maken, door niet het aantal voorkomens in een record te zetten, maar de positie van het woord :)

Mag ik vragen hoeveel documenten er geïndexeerd moeten worden? Als dat er duizenden zijn lijkt het me niet zo verstandig om zelf even een search in elkaar te zetten. Een goed zoeksysteem is tamelijk complex. Heb je redenen om het zelf te maken? Anders zou je gewoon gebruik kunnen maken van bestaande zoekmachines (of probabilistic information retrieval systemen, zoals dat ook weleens genoemd wordt), zoals bijvoorbeeld Xapian, waar ook Omega op gebaseerd is :).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mag ik vragen hoeveel documenten er geïndexeerd moeten worden? Als dat er duizenden zijn lijkt het me niet zo verstandig om zelf even een search in elkaar te zetten.
Het gaat om nieuwsberichten etc dus reviews en previews ennuh downloads

Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Gewoon voor een private website, met enkele auteurs? Dan zal het inderdaad wel niet zoveel worden en kan je inderdaad zelf wel wat goed werkends maken :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
houd er rekening mee dat er elke dag nieuws is;) ennuh ook andere dingen gebeuren;) en mijn leven maakt ook een hoop mee:P en als ik dat allemaal in een archief wil zetten wat altijd doorgezocht moet kunnen worden zal het in het begin miss wel klein zijn maar in loop van de tijd niet ,en het is niet echt de bedoeling dan al in korte tijd alles aan te passen voor iets nieuws, daarom wil ik gelijk ook een goede start ermee maken.

Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Als je een goede start wilt maken zou ik gewoon een bestaande oplossing gebruiken, en die toespitsen op jouw situatie. :)
Pagina: 1