full text search en stuk van een string
Ik heb een lijst met gegevens waar ik in wil zoeken met een LIKE of een match against (of beide)
Mijn probleem:
Als ik het woord 'kratje' wil zoeken moet er ook een match zijn met bierkratje.
source:
SELECT * FROM `woordenlijst` WHERE (match(title) against('kratje'))
Ik krijg nou dus wel een match met met kratje maar niet met bierkratje, als ik against('+Kratje*' In boolean mode) gebruik krijg ik wel kratjebier maar,
against('+*Kratje' In boolean mode) of
against('+*Kratje*' In boolean mode) werkt en mag niet?
Nu kan ik een like gebruiken maar deze geeft niet altijd het beste resultaat.
Mijn vraag, kun je met een match against een zoekwoord vinden in een groter woord?
Sorry als beetje vaag is maar ik wil dit niet in php doen omdat er te veel resultaten zijn en ik dan 100 keer 200.000 records moet zoeken.
Alvast bedankt.
SELECT * FROM woordenlijst WHERE (MATCH(title) AGAINST ('kratje'))
Hoe ziet de FULLTEXT INDEX eruit die je op de tabel hebt gezet? In een MATCH() moet je in principe alle kolommen uit de full-text index noemen. Dus niet alleen MATCH(title) als de index zich over meerdere kolommen uitstrekt.
Nog een voorbeeld:
ik heb 'Kipschnitzels' en 'schnitz' maar een query als:
SELECT * FROM `cat_plist` WHERE (MATCH(`positief`) AGAINST ('schnitz'))
levert alleen 'schnitz' op.
Ook met score:
SELECT *,
MATCH(`positief`) AGAINST ('schnitz') AS SCORE
FROM `cat_plist`
WHERE MATCH(`positief`) AGAINST ('schnitz')
Laat eens een CREATE TABLE tabeldefinitie zien met de indexen?
Server version: 5.1.41-3ubuntu12.10
Protocol version: 10
CREATE TABLE IF NOT EXISTS `cat_plist` (
`Id` int(255) NOT NULL AUTO_INCREMENT,
`positief` text,
`category1` varchar(255) NOT NULL DEFAULT '',
`category1` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`posId`),
FULLTEXT KEY `positief` (`positief`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=23287 ;
#1060 - Duplicate column name 'category1'
#1072 - Key column 'posId' doesn't exist in table
CREATE TABLE IF NOT EXISTS `cat_plist` (
`Id` int(255) NOT NULL AUTO_INCREMENT,
`positief` text,
`category1` varchar(255) NOT NULL DEFAULT '',
`category2` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`Id`),
FULLTEXT KEY `positief` (`positief`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=23287 ;
Deze moet prima doen.
Probeer het dus eens met meer gevarieerde teksten, want je query zonder jokertekens is op zich goed.
Ik twijfel eraan of match against dit wel kan, je kan namelijk met boolean mode een wildcard gebruiken * maar deze mkan denk ik niet 2 keer. Iemand nog een idee wat er fout is? of een beter idee?
groet karel