PDA

Bekijk Volledige Versie : Search functie



ST247
29/05/07, 23:40
Hoi,

Zoals ik eerder al eens vernoemd had, ben ik bezig met een site met o.a. een
discografie en videografie van een artiest. Ik zou nu op die site ook een
zoekmogelijkheid willen inbouwen.

Wanneer men vb. queen ingeeft, wil ik alles van videografie en discografie
te zien krijgen waar queen in de album- of tracktitel voorkomt.

Ik dacht te werken met full text search, maar ik zit hier met verschillende
tabellen. De structuur, die hier van belang is, ziet er als volgt uit :
voor discografie de tabellen discografie (albuminfo), albumtrack
(tussentabel albums-tracks), tracks, country, label
voor videografie de tabellen videografie, vtracks (de tracks op de albums),
country, label
Ik heb een view aangemaakt voor discografie waar ik alle info verzamel die
van belang is voor de zoekfunctie. Via een gewone select lukt het me wel om
te gaan kijken of 1 van de velden het/de betreffende woord(en) bevat.
Wanneer ik nu echter zou zoeken op queen Japan, met als bedoeling alle
albums uit Japan waar queen in de titel of tracktitel zit, dan zit ik vast.

Ik heb dus eigenlijk momenteel geen idee wat hier de ideale manier van
werken zou zijn. Fulltext leek me leuk omdat je ook kan ordenen op
relevantie. Kan er iemand me op weg helpen ?

Alvast bedankt ;-)

Erick T. Barkhuis
29/05/07, 23:40
ST247:

> Wanneer men vb. queen ingeeft, wil ik alles van videografie en discografie
> te zien krijgen waar queen in de album- of tracktitel voorkomt.
>
> Ik dacht te werken met full text search, maar ik zit hier met verschillende
> tabellen. [...]
>
> Ik heb dus eigenlijk momenteel geen idee wat hier de ideale manier van
> werken zou zijn. Fulltext leek me leuk omdat je ook kan ordenen op
> relevantie. Kan er iemand me op weg helpen ?

Heb je al eens Sphider overwogen?
http://www.cs.ioc.ee/~ando/sphider/

--
Erick

ST247
29/05/07, 23:40
"Erick T. Barkhuis" <erick.use-net@ardane.c-o-m> wrote in message
news:MPG.20c10ce39d27836098a76a@news.individual.ne t...
> ST247:
>
>> Wanneer men vb. queen ingeeft, wil ik alles van videografie en
>> discografie
>> te zien krijgen waar queen in de album- of tracktitel voorkomt.
>>
>> Ik dacht te werken met full text search, maar ik zit hier met
>> verschillende
>> tabellen. [...]
>>
>> Ik heb dus eigenlijk momenteel geen idee wat hier de ideale manier van
>> werken zou zijn. Fulltext leek me leuk omdat je ook kan ordenen op
>> relevantie. Kan er iemand me op weg helpen ?
>
> Heb je al eens Sphider overwogen?
> http://www.cs.ioc.ee/~ando/sphider/
>
> --
> Erick

Dit lijkt me inderdaad wel iets handigs, maar misschien ook te uitgebreid
voor wat ik wil doen.

Ik was aan het denken aan de volgende werkwijze :
2 queries zodat er apart gezocht wordt in de discography view en in de
videography view (ook om mijn links te laten kloppen) en er ook afzonderlijk
wordt meegegeven resultaten in discography en resultaten in videography
alle woorden afzonderlijk zoeken
zelf een score bijhouden zodat gesorteerd kan worden op score (en dus
relevantie)
Als je dan vb. queen en Japan zoekt, je score 2 hebt waar beiden in de
record voorkomen en 1 als slechts 1 van beiden voorkomen
Eventueel daarna de uitbreiding om ook rekening te houden met zaken als
+, -, ""

Is zoiets haalbaar en zo ja, hoe kan ik hier best aan beginnen ?

Floortje
29/05/07, 23:40
ST247 schreef:

> Dit lijkt me inderdaad wel iets handigs, maar misschien ook te
> uitgebreid voor wat ik wil doen.
>
> Ik was aan het denken aan de volgende werkwijze :
> 2 queries zodat er apart gezocht wordt in de discography view en in de
> videography view (ook om mijn links te laten kloppen) en er ook
> afzonderlijk wordt meegegeven resultaten in discography en resultaten in
> videography
> alle woorden afzonderlijk zoeken
> zelf een score bijhouden zodat gesorteerd kan worden op score (en dus
> relevantie)
> Als je dan vb. queen en Japan zoekt, je score 2 hebt waar beiden in de
> record voorkomen en 1 als slechts 1 van beiden voorkomen
> Eventueel daarna de uitbreiding om ook rekening te houden met zaken als
> +, -, ""
>
> Is zoiets haalbaar en zo ja, hoe kan ik hier best aan beginnen ?

Ik zoiets wel eens gemaakt. Eerst doe je de volledige query inclusief
joins etc etc.

Vervolgens loop je door de data en kijk je of de zoekstring aanwezig is.
Als deze aanwezig isb epaal dan de relevantie (word count, relatieve
word count of plaatsing van de woorden kun ed allemaal meenemen). Zoniet
gooi de data weg.

Als allerlaatste sorteer je je overgebleven array op relevantie.

Klaar is Klara ;-)

Arjen
--
Arjen
http://www.hondenpage.com

ST247
29/05/07, 23:40
"Floortje" <lala@zingmaarmetmijmee.enel> wrote in message
news:465946e9$0$48770$dbd41001@news.wanadoo.nl...
> ST247 schreef:
>

>> Ik was aan het denken aan de volgende werkwijze :
>> 2 queries zodat er apart gezocht wordt in de discography view en in de
>> videography view (ook om mijn links te laten kloppen) en er ook
>> afzonderlijk wordt meegegeven resultaten in discography en resultaten in
>> videography
>> alle woorden afzonderlijk zoeken
>> zelf een score bijhouden zodat gesorteerd kan worden op score (en dus
>> relevantie)
>> Als je dan vb. queen en Japan zoekt, je score 2 hebt waar beiden in de
>> record voorkomen en 1 als slechts 1 van beiden voorkomen
>> Eventueel daarna de uitbreiding om ook rekening te houden met zaken als
>> +, -, ""
>>

> Ik zoiets wel eens gemaakt. Eerst doe je de volledige query inclusief
> joins etc etc.
>
> Vervolgens loop je door de data en kijk je of de zoekstring aanwezig is.
> Als deze aanwezig isb epaal dan de relevantie (word count, relatieve word
> count of plaatsing van de woorden kun ed allemaal meenemen). Zoniet gooi
> de data weg.

Ik ben allemaal nog niet zolang met php en mysql bezig, dus misschien een
domme vraag hoor ;-)

Stap 1 die query maken zal me wel lukken (je bedoelt hier dan echt alle
gegevens uithalen veronderstel ik, nog niet gefilterd).

Stap 2, loop door de data en kijken of de zoekstring aanwezig is, zal me ook
nog lukken. Ik veronderstel dat het het eenvoudigste is om alle woorden van
je zoekstring ook in een array te stoppen ?

Stap 3 echter... op welke manier pak je dat praktisch aan ? Controleren op
elk woord van je zoekstring en dan vb. de id met een score in een nieuwe
array stoppen ? Of relevante gegevens allemaal bijhouden (wat ik wil
weergeven) in een nieuwe array en dan die daarna doorlopen om weer te geven
? Kan je eventueel een voorbeeldje in php of pseudo code geven van de
aanpak ?

Nu ben ik echter op een 'beperking' gebotst. Ik had ondertussen een zeer
beperkte zoekmogelijkheid ingebouwd, gebaseerd op views... nu merk ik dat
dit niet ondersteund is onder mysql 5 en mijn provider draait 4.1.11. Is
hier een ander alternatief voor ? Of zit er niets anders dan mijn query in
mijn code op te bouwen met de nodige joins ?

Nogmaals mijn dank !

Annemie

Floortje
01/06/07, 00:26
> Stap 3 echter... op welke manier pak je dat praktisch aan ? Controleren
> op elk woord van je zoekstring en dan vb. de id met een score in een
> nieuwe array stoppen ? Of relevante gegevens allemaal bijhouden (wat ik
> wil weergeven) in een nieuwe array en dan die daarna doorlopen om weer
> te geven ? Kan je eventueel een voorbeeldje in php of pseudo code geven
> van de aanpak ?
>
Hoi Annemie, ik zal even mijn script opzoeken van de week. Ik kom er op
terug :-)

--
Arjen
http://www.hondenpage.com

ST247
11/06/07, 12:35
> Hoi Annemie, ik zal even mijn script opzoeken van de week. Ik kom er op
> terug :-)

Dat zou super zijn ! Bedankt alvast.
Annemie