[php] een search script maken hoe pak ik dat aan?

Pagina: 1
Acties:

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Moet ik dit via een SQL query gaan doen via de like operator :?
Moet ik eerst de veldinhoud gaan ophalen en vervolgens met Regular expressions gaan zoeken? :?

Ik wil in ieder geval wel weten hoe vaak bepaalde woorden zijn gevonden om zo te kunnen sorteren op relevantie.

It’s nice to be important but it’s more important to be nice


Verwijderd

Wat ik zou doen:
code:
1
SELECT [hier alles wat je wilt pakken] WHERE [veld waarin zoekwoordje moet staan] LIKE '%[zoekwoordje]%' ORDER BY [waardie op moet ordenen] LIMIT [limiter]

En dan php laten uitzoeken hoevaak [zoekwoordje] voortkomt in [veld waarin zoekwoordje moet staan]

Dit is al een behoorlijke hint. Ga nu maar eens zoeken, en in de manuals kijken!

Wat volgens mij ook kan is in je query al de woordjes tellen, maar volgens mij kan php dit via eregi veel vlugger . Zoeits als
PHP:
1
2
3
4
5
6
<?
while (resultaten ophalen) {
$blaat = array (resultaten, count(eregi([zoekwoordje]resultaten)));
}
blaat sorteren op de counter.
?>

Zoeits. Hoe precies weet ik even niet, maar het kan wel.

  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 14-09 23:09
Het hangt er heel erg vanaf in welke orde van grootte je denkt. Als je gewoon een kleine site hebt, kun je best met LIKE gaan zoeken, maar erg efficient is het niet. Als je een wat grotere site hebt(en MySQL), zou je ook de Fulltext search mogelijkheden van MySQL kunnen gebruiken.
Voor een echt grote site zul je voorlopig zelf eigen woordindexes moeten maken, daar is de Fulltext index nog niet snel genoeg voor.

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Op dinsdag 25 december 2001 14:34 schreef daniel_hoenderdos het volgende:
Wat ik zou doen:
code:
1
SELECT [hier alles wat je wilt pakken] WHERE [veld waarin zoekwoordje moet staan] LIKE '%[zoekwoordje]%' ORDER BY [waardie op moet ordenen] LIMIT [limiter]

En dan php laten uitzoeken hoevaak [zoekwoordje] voortkomt in [veld waarin zoekwoordje moet staan]
Dat was ook een beetje mijn idee, maar aangezien je ook op meerdere woorden moet kunnen zoeken zullen er dus meerdere LIKES in de query kunnen voorkomen.
Wat volgens mij ook kan is in je query al de woordjes tellen, maar volgens mij kan php dit via eregi veel vlugger . Zoeits als
PHP:
1
2
3
4
5
6
<?
while (resultaten ophalen) {
$blaat = array (resultaten, count(eregi([zoekwoordje]resultaten)));
}
blaat sorteren op de counter.
?>

Zoeits. Hoe precies weet ik even niet, maar het kan wel.
Ja lijkt mij sneller dan alles in 1 query te doen. Anders wordt het een tamelijk ingewikkelde query.

Bedankt voor de suggesties het gaat overigens om een search voor een forum.

It’s nice to be important but it’s more important to be nice


Verwijderd

dan lijkt me de fulltext search van MySQL het beste. Volgens mij kom je al een behoorlijk eind als je dit tut eens goed doorneemt...

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Deze draad schop ik even omhoog, want het leek me niet nodig om een nieuw topic hiervoor te maken.

Ik heb de FULLTEXT documentatie doorgenomen en ik denk het nu te snappen. Ik heb nu een tabel aangemaakt met 2 FULLTEXT indexen op de kolommen Topic en Message.

Echter indien ik de volgende query uitvoer:
code:
1
SELECT * FROM Forum WHERE MATCH (Message) AGAINST('hallo doei')

Krijg ik van MySQL de volgende melding terug:
Can't find FULLTEXT index matching the column list

Ondanks dat Message wel een FULLTEXT kolom is :?

It’s nice to be important but it’s more important to be nice


Verwijderd

het zu ook handig zijn als je gewoon je webserver laat afsporen op de meta tags in de html files, dan kun je ook directory's etc afzonderen maar is er minder werk!

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Volgens mij is deze reply bestemd voor een andere thread.

It’s nice to be important but it’s more important to be nice


Verwijderd

wat zijn de specificaties van je tabel (dus de soort kolommen). Je kunt trouwens beter niet met hoofdletters werken in tabel namen, bestandsnamen of string namen...

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Dit is mijn code om de tabel aan te maken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE forum (
  ID         mediumint   UNSIGNED DEFAULT '0' NOT NULL auto_increment,
  UserID     mediumint   UNSIGNED DEFAULT '0' NOT NULL,
  UserIP    varchar(15) NOT NULL,
  Topic  varchar(50),
  TopicLocked   tinyint     UNSIGNED DEFAULT '0' NOT NULL,
  MsgIcon   varchar(20),
  ReplyTo    mediumint   UNSIGNED DEFAULT '0' NOT NULL,
  DateTime   bigint(20)  UNSIGNED DEFAULT '0' NOT NULL,
  LastReply  bigint(20)  UNSIGNED DEFAULT '0' NOT NULL,
  LastEdit  bigint(20)   UNSIGNED DEFAULT '0' NOT NULL,
  Message    text        NOT NULL,
  FULLTEXT   (Topic,Message),
  PRIMARY KEY (id),
  UNIQUE (id)
)

Echter als ik achteraf een index toevoeg op de tabel, dus:
ALTER TABLE forum ADD FULLTEXT(Topic,Message)

Dan werkt het wel.
Iets klopt er dus niet aan mijn CREATE TABLE query

It’s nice to be important but it’s more important to be nice

Pagina: 1