[MySQL]Relevantiescore bij fulltext search werkt niet (1194)

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
In één tabel in een mysql database kan ik zoeken met fulltext search. Echter, als ik een relevantie score wil toevoegen dan lukt het niet. Dan krijg ik de volgende foutmelding: #1191 - Can't find FULLTEXT index matching the column list.

Systeem:
CentOs 5.2
MySQL 5.0.45
PHP 5.1.6
Momenteel test ik het in phpMyAdmin 2.8.2.4

Ik probeer in 1 tabel in meerdere kolommen te gelijk te zoeken met fulltext search. Sommige kolommen bevatten slechts 1 woord of zijn leeg. Dit gaat prima met de fulltext search:
code:
1
SELECT * FROM mijntabel WHERE MATCH (naam,merknaam1,merknaam2,merknaam3,merknaam4,merknaam5) AGAINST ('pindakaas' IN BOOLEAN MODE)


Om de resultaten te verbeteren wil ik de gegevens sorteren op relevantie. Ik gebruik de volgende query:
code:
1
SELECT *, MATCH (naam,merknaam1,merknaam2,merknaam3,merknaam4,merknaam5) AGAINST ('pindakaas') AS score FROM mijntabel WHERE MATCH (naam,merknaam1,merknaam2,merknaam3,merknaam4,merknaam5) AGAINST('pindakaas')

Maar dat werkt dus niet. Ik krijg dan de volgende error: #1191 - Can't find FULLTEXT index matching the column list.

Hoe kan dat? Wat doe ik fout? Fulltext search is wel mogelijk, maar waarom gaat het bij de relevantiescore fout?

Ik gebruik fulltext search omdat ik de zoekopdracht straks wil uitbreiden door ook door de kolommen beschrijving en content te laten zoeken.

[ Voor 3% gewijzigd door Paul_ op 22-02-2009 11:53 ]


Acties:
  • 0 Henk 'm!

  • dev10
  • Registratie: April 2005
  • Laatst online: 14:31
Heb je wel een fulltext index op je kolommen staan?

SQL:
1
ALTER TABLE mijntabel ADD FULLTEXT (naam, merknaam1, merknaam2, merknaam2, merknaam3, merknaam4, merknaam5)

Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
Ja, dat heb ik. Aangezien ik ook een "gewone" fulltext search kan doen.

Afbeeldingslocatie: http://www.vandenbroek.net/db_indexen.jpg

Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
De index is niet hetzelfde als de lijst na match(), als deze twee niet hetzelfde zijn kan mysql alleen een boolean fulltext search doen (en daarom werkt het wel in de where), maar deze heeft geen relevantiescore, en dat kan dus ook niet worden weergegeven in de select.

Acties:
  • 0 Henk 'm!

  • Paul_
  • Registratie: Juni 2001
  • Laatst online: 13-11-2021
Bedankt dat was het probleem.

Met onderstaande code lijkt het nu wel dat ik kan zoeken IN BOOLEAN MODE en met de relevantie score (1x wel boolean gebruikt en andere keer niet) (of kan dat niet zoals jij zei?):

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT naam, stofnaam, bronnaam,
MATCH (
naam, stofnaam, merknaam1, merknaam2, merknaam3, merknaam4, merknaam5, merknaam6, merknaam7, merknaam8, merknaam9
)
AGAINST (
'pindakaas noten'
) AS score
FROM Z_mijntabel
WHERE MATCH (
naam, stofnaam, merknaam1, merknaam2, merknaam3, merknaam4, merknaam5, merknaam6, merknaam7, merknaam8, merknaam9
)
AGAINST (
'pindakaas noten'
IN BOOLEAN
MODE
)
ORDER BY `score` DESC
LIMIT 0 , 150

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Hij bedoelt dat je index op 11 velden zit maar dat je de search slechts uitvoert op 6 velden. Correct me if im wrong maar volgens mij moet je eerst nog een fulltext index maken op de velden die je daadwerkelijk gebruikt in je query.
Pagina: 1