FULLTEXT Search

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Steen

steen

28/09/2009 19:30:00
Quote Anchor link
Beste PHP'ers,

Klein probleempje:
Ik had een database netjes in elkaar gezet, daarna heb ik een Fulltext search gemaakt:

SELECT * FROM tabel MATCH(veld1,veld2,veld3,auteur,inhoud) AGAINST ("trefwoord")

Op zich werkte dat goed, maar nu heb ik het veld 'auteur' in een apparte tabel gezet. Nu zou het zo kunnen zijn dat ik twee query's uitvoer en dan de query's samenvoeg, maar hoe doe ik dit? En wat moet ik daarvoor met de 'auteurs'-tabel doen?
 
PHP hulp

PHP hulp

20/04/2024 14:40:00
 

28/09/2009 19:33:00
Quote Anchor link
Vraag hoe kan je netjes (InnoDB) en fulltext (MyISAM) combineren.

Misschien iets met een OR id IN (SELECT * FROM andere tabell...........)
 
Steen

steen

28/09/2009 19:58:00
Quote Anchor link
Ik dacht aan twee keer fulltext en dan combineren, dus op beide tabellen, maar dat combineren, hoe moet dat? Dat is mijn vraag.
 

28/09/2009 20:49:00
Quote Anchor link
2 rowsets combineer met je UNION; eis is dat gelijke columncount hebt; columns worden op nummer samengevoegd
 
Jan Koehoorn

Jan Koehoorn

28/09/2009 21:59:00
Quote Anchor link
Je kunt inderdaad twee FULLTEXT indexes maken. Daarna wordt je query zo:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT s.naam, b.titel
FROM schrijvers AS s
LEFT JOIN boeken AS b ON s.id = b.schrijver_id
WHERE MATCH(naam) AGAINST('wolkers')
OR MATCH(titel) AGAINST('wolkers')

Getest met twee tabellen, schrijvers en boeken.

Edit: nog even gekeken, en deze werkt nog iets beter:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT s.naam, b.titel,
MATCH(naam) AGAINST('wolkers') + MATCH(titel) AGAINST('wolkers') AS score
FROM schrijvers AS s
LEFT JOIN boeken AS b ON s.id = b.schrijver_id
WHERE MATCH(naam) AGAINST('wolkers')
OR MATCH(titel) AGAINST('wolkers')
ORDER BY score DESC

Immers, als de gezochte string in beide velden voorkomt is het zoekresultaat relevanter. Je hebt in dit geval wel die ORDER BY nodig, want MySQL doet de sortering op deze manier niet meer automatisch.
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.