[SQL] Gevonden woorden als resultaat

Pagina: 1
Acties:

  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
Ik bezig met het maken van een simpele search engine, en daarvoor maak ik gebruik van de volgende query:

code:
1
2
3
4
5
6
7
8
SELECT count(keywords.keyid) as score,
       pages.titel as title,
       pages.omschrijving as description,
       url
FROM   keywords, pages
WHERE  (pages.pageid = keywords.pageid) AND (keywords.keyword REGEXP 'dit|is|een|test')
GROUP BY keywords.pageid
ORDER BY score DESC


Deze query zoekt in de tabellen keywords en pages, welke er als volgt uitzien.

Keywords bevat de kolommen: keyid, pageid en keyword
keyid is de id van het zoekwoord
keyword is het zoekwoord
pageid is de pagina waarop het woord voorkomt

Pages bevat de kolommen: pageid, titel, omschrijving en url
de namen spreken voor zich.

Deze querie geeft voor elke hit als resultaat: Een pagina ID, URL van de pagina, omschrijving, en hoeveel zoekwoorden er gevonden zijn op de desbetreffende pagina.

Nu wil ik graag mijn query zodanig uitbreiden dat ik ook de gevonden woorden per pagina bij de resultaten zitten.

Iemand enig idee hoe ik dit kan oplossen??

Zolang ik het zelf geloof is het goed toch?


Verwijderd

als ik het goed begrijp heb je met count(keywords.keyid) al het aantal woorden geselecteerd, dan kun je gewoon ' keywords.keyword' by je select clause plakken volgens mij. dus:
code:
1
select keywords.keyword as keyword, count(keywords.keyid) as score etc..

  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
code:
1
select keywords.keyword as keyword, count(keywords.keyid) as score etc..


Geeft alleen het eerst gevonden woord, dus niet allemaal...

Zolang ik het zelf geloof is het goed toch?


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Misschien zo:

code:
1
2
3
4
5
6
SELECT P.pageid, P.titel AS title, P.omschrijving AS description, P.url, K.keyword,
(SELECT COUNT(keyword) FROM keyword WHERE pageid = P.pageid AND K.keyword REGEXP 'dit|is|een|test') AS score
FROM keywords K
INNER JOIN pages P ON K.pageid = P.pageid
WHERE K.keyword REGEXP 'dit|is|een|test'
ORDER BY score DESC

  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
Dat zal ik ff uitproberen... bedankt iig :)

Edit:

Ik krijg de volgende error:
Couldn't execute query [1064]: You have an error in your SQL syntax near 'SELECT COUNT(keyword) FROM keyword WHERE pageid = P.pageid AND K.keyword R' at line 3

[ Voor 71% gewijzigd door spok9 op 27-12-2002 17:13 ]

Zolang ik het zelf geloof is het goed toch?


  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
Is er niemand die mij verder kan helpen :?

Zolang ik het zelf geloof is het goed toch?


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

Als je gebruik maakt van MySQL kan je geen gebruik makn van sub-selects

en als je dus gebruik maakt van mysql, kan je voor een Fulltext-search optie gaan:
Fulltext-search

[ Voor 55% gewijzigd door thomaske op 03-01-2003 15:50 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06-2025
Is het niet zo dat wanneer je gebruik maakt van een een count() of andere aggregate function met nog andere velden die moeten worden getoond, je dan altijd een GROUP BY erbij moet plaatsen?

Fuck me if I'm wrong, but isn't your name Gretchen?


  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
thomaske schreef op 03 januari 2003 @ 15:47:
Als je gebruik maakt van MySQL kan je geen gebruik makn van sub-selects

en als je dus gebruik maakt van mysql, kan je voor een Fulltext-search optie gaan:
Fulltext-search
Ik gebruik MySQL, maar heel erg goed ben ik niet in SQL, is erg lang geleden dat ik dat geleerd heb...
FullText is een optie, maar ik wil bezoekers graag op trefwoorden laten zoeken.
Theguide schreef op 03 januari 2003 @ 16:47:
Is het niet zo dat wanneer je gebruik maakt van een een count() of andere aggregate function met nog andere velden die moeten worden getoond, je dan altijd een GROUP BY erbij moet plaatsen?
Met group by geeft bovenstaande suggestie nog steeds dezelfde error.

Met onderstaande SQL krijg ik wel voor elkaar dat 1 van de gevonden woorden als resultaat mee komt, maar is dus involledig:
code:
1
2
3
4
5
6
7
8
SELECT pages.pageid, pages.titel AS title, pages.omschrijving AS description,
             pages.url, keywords.keyword, COUNT( keywords.keyid ) AS score
FROM keywords
INNER JOIN pages ON keywords.pageid = pages.pageid
WHERE keywords.keyword
REGEXP 'een|pagina'
GROUP BY keywords.pageid
ORDER BY score

Zolang ik het zelf geloof is het goed toch?


  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
Help... ;)

Zolang ik het zelf geloof is het goed toch?


  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
I still need some help...

Zolang ik het zelf geloof is het goed toch?


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

spok9 schreef op 03 January 2003 @ 18:49:
[...]


Ik gebruik MySQL, maar heel erg goed ben ik niet in SQL, is erg lang geleden dat ik dat geleerd heb...
FullText is een optie, maar ik wil bezoekers graag op trefwoorden laten zoeken.
FullText is de naam van de indexerings methode, je kan dus zeker wel zoeken op trefwoorden.
Ik denk namelijk niet dat je het op deze manier op kan lossen in 1 query.

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
Is FullText search niet heel erg "quick 'n dirty" :?

Zolang ik het zelf geloof is het goed toch?


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 14-07 14:28

thomaske

» » » » » »

Waarom denk je dat?

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
Het zal m'n onweten wel zijn ;)

Ik zal het eens goed doorlezen in de documentatie :)

Zolang ik het zelf geloof is het goed toch?


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 20:30
Die funtie is er voor gemaakt, zal waarschijnlijk niet zo heel erg buggy zijn.

  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
Ik ga het zeker bestuderen, scheelt een hoop keywords_uit_pagina_filter code :)

Maarruhh... niemand een antwoord op mijn oorspronkelijke vraag?

BTW. hoe zit het met de server belasting die een fulltext search uitoefent?

Zolang ik het zelf geloof is het goed toch?


  • smaij
  • Registratie: November 2000
  • Laatst online: 24-08 15:57
Ik vind dit wel een interessant onderwerp.. Is er niet iemand in de buurt die een tupje van de sluier wil geven over de manier waarop de alternatieve search van got dit doet? die heeft dat ook.. :) Die heeft ACM toch gemaakt?

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

zo dan:

code:
1
2
3
4
5
6
SELECT P.pageid, P.titel AS title, P.omschrijving AS description, P.url, K.keyword,
(SELECT COUNT(keyword) FROM keyword WHERE pageid = P.pageid AND keyword REGEXP 'dit|is|een|test') AS score
FROM keywords K
INNER JOIN pages P ON K.pageid = P.pageid
WHERE K.keyword REGEXP 'dit|is|een|test'
ORDER BY score DESC

  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
SQL-query :
code:
1
2
3
4
5
6
7
8
9
10
11
12
SELECT pages.pageid, pages.titel AS title, pages.omschrijving AS description, pages.url, keywords.keyword, (

SELECT COUNT( keywords.keyword )
FROM keywords, pages
WHERE keywords.pageid = pages.pageid AND keyword
REGEXP 'een|pagina|test'
) AS score
FROM keywords
INNER JOIN pages ON keywords.pageid = pages.pageid
WHERE keywords.keyword
REGEXP 'dit|is|een|test'
ORDER BY score DESC

MySQL retourneerde:
You have an error in your SQL syntax near 'SELECT COUNT( keywords.keyword ) FROM keywords, pages WHERE keywords.pageid = p' at line 1
Nog steeds dezelfde foutmelding dus :(

Als ik een van de 2 selects afzonderlijk uitvoer krijg ik geen foutmeldingen...

Bedankt voor de moeite BTW :)

[ Voor 6% gewijzigd door spok9 op 09-01-2003 20:43 ]

Zolang ik het zelf geloof is het goed toch?


  • smaij
  • Registratie: November 2000
  • Laatst online: 24-08 15:57
Het is imho niet mogelijk om in MySQL subqueries uit te voeren, dus vandaar die fout :|

  • edie
  • Registratie: Februari 2002
  • Laatst online: 23:13
smaij schreef op 10 January 2003 @ 10:36:
Het is imho niet mogelijk om in MySQL subqueries uit te voeren, dus vandaar die fout :|
Kun je wel subselects doen?
Bijv:
code:
1
2
3
4
select b1.*, b2.* 
from (select * from bla) as b1
inner join (select * from bla2) as b2
on b1.id = b2.id


Dan zou het (denk ik) wel lukken. :)

"In America, consumption equals jobs. In these days, banks aren't lending us the money we need to buy the things we don't need to create the jobs we need to pay back the loans we can't afford." - Stephen Colbert


  • smaij
  • Registratie: November 2000
  • Laatst online: 24-08 15:57
Nee.. Je zou IMHO wel iets kunnen in de trand van eerst de subselects uitvoeren, en het resultaat meegeven aan de hoofdquery ? Misschien dat dat wel kan.. Nooit geprobeert, maar een resultaat is gewoon een verzameling gegevens in een bepaalde volgorde.

  • smaij
  • Registratie: November 2000
  • Laatst online: 24-08 15:57
klein kickje.. ik vind het wel een interessante discussie, en zou wel is willen weten hoe zoiets gemaakt word als je te maken heb met MySQL. Komt het door InnoDB dat de zoekmachina van tweakers wel de gevonden woorden als resultaten kan tonen?

  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
Nog een kickje, ik wil nl. ook nog steeds weten hoe het zou kunnen :)

Zolang ik het zelf geloof is het goed toch?


  • smaij
  • Registratie: November 2000
  • Laatst online: 24-08 15:57
http://80.84.227.171/artikelen.php?aid=94

Maar hier komt toch nergens naar voren hoe je de gevonden zoekwoorden als resultaat kan geven :)

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

smaij schreef op 09 januari 2003 @ 18:34:
Is er niet iemand in de buurt die een tupje van de sluier wil geven over de manier waarop de alternatieve search van got dit doet? die heeft dat ook.. :) Die heeft ACM toch gemaakt?
ACM heeft 'm volgens mij niet gemaakt, maar 'aan react gehangen'
de makers zijn http://www.xapian.org/ daar is vast meer info over de manier van indexeren c.q. zoeken te vinden :)

  • smaij
  • Registratie: November 2000
  • Laatst online: 24-08 15:57
Is dat een php port? wat hij gebruikt, of heeft hij het gewoon als CGI draaien? (snel effe die site gechecked..) Ik moet zowiezo php hebben want ik wil sessies kunnen gebruiken vanwege autorisaties.. Overal ziet het er goed uit moet ik zeggen dat pakket..

  • spok9
  • Registratie: November 2000
  • Laatst online: 25-08 09:28

spok9

Groen...

Topicstarter
TheRookie schreef op 16 januari 2003 @ 12:13:
[...]

ACM heeft 'm volgens mij niet gemaakt, maar 'aan react gehangen'
de makers zijn http://www.xapian.org/ daar is vast meer info over de manier van indexeren c.q. zoeken te vinden :)
Het is volgens mij een C++ programma dat gebruikt kan worden door andere talen...
Helaas, geen optie dus.... Informatie over de indexering enzo kan ik niet echt vinden...

Zolang ik het zelf geloof is het goed toch?

Pagina: 1