[mysql] fulltext search werkt voor geen meter?

Pagina: 1
Acties:

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Hey,

ik heb de search gebruikt maar daar kom ik zo ongeveer alleen maar mensen tegen die errors krijgen bij het gebruiken van MySQL fulltext search.

Ik krijg geen errors, bij mij werkt hij de ene keer wel en de andere keer niet.

Ik heb een tabel genaamd postings, daarin heb ik een veld id en een veld inhoud(FULLTEXT).

In die tabel staat een posting met wat woorden, onder andere 'probeerde' en 'automatisch'.

Als ik deze query uitvoer, dan vind hij die posting wel:
SELECT id FROM forumpostings WHERE MATCH (inhoud) AGAINST ('probeerde')

Als ik deze query uitvoer dan vind hij de posting niet:
SELECT id FROM forumpostings WHERE MATCH (inhoud) AGAINST ('automatisch')

Dit probleem heb ik met veel meer woorden, er zijn maar een paar woorden waarmee hij de posting wel vind, bij de meeste krijg ik geen resultaten :|

  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 16:59

JaQ

je zou dit kunnen proberen:

code:
1
2
3
select id 
from forumpostings 
where instr (inhoud, 'probeerde') > 0;


instr zoekt in een string of een 2e string daarin voorkomt. De waarde die terug komt is de postie waar deze (sub-) string begint.

Egoist: A person of low taste, more interested in themselves than in me


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

DrFrankenstoner schreef op 06 January 2003 @ 14:04:
je zou dit kunnen proberen:

code:
1
2
3
select id 
from forumpostings 
where instr (inhoud, 'probeerde') > 0;


instr zoekt in een string of een 2e string daarin voorkomt. De waarde die terug komt is de postie waar deze (sub-) string begint.


Ik wil niet weten hoe lang je database daarover gaat doen met een beetje veel berichten...

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 17:51
Ik werk zelf altijd met LIKE (of bij complexere dingen met EXPR of zo, regexps iig); misschien dat dat wel werkt?

  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 16:59

JaQ

Bosmonster schreef op 06 januari 2003 @ 14:15:

[...]


Ik wil niet weten hoe lang je database daarover gaat doen met een beetje veel berichten...
instr is een van de snellere functies. (zeker in Oracle, maar het gaat in dit geval om mysql). Ik denk dat de resultaten zeker vergelijkbaar zullen zijn met match.... (maar dat is dus een mening)

In ieder geval wel een factor 100 sneller dan like (dat is de trage variant die je bedoeld).

[ Voor 11% gewijzigd door JaQ op 06-01-2003 14:18 ]

Egoist: A person of low taste, more interested in themselves than in me


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Hmm zal het eens proberen, maar toch is het vaag, FULLTEXT search is hier toch juist voor gemaakt, dan zou het toch goed moeten werken?

Met like ga ik zowiezo niet werken, het gaat om een tabel met een paar honderd duizend postings, dus dat is zowiezo niet de slimste manier om te zoeken :)

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

thomaske

» » » » » »

en de manual heb je al doorgenomen?

http://www.mysql.com/doc/en/Fulltext_Search.html

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


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Jep.
Ik wist ook al dat dat als een woord vaak voor komt hij automatisch in die 'stopwoorden lijst' wordt gezet, maar ik had in m'n eigen tabel niet gezien dat 'automatisch' in 9 van de 10 postings stond (ergens overheen gelezen) :>

Het gaat nu wel weer ok, heb alleen nog 1 vraag.

Ik heb een posting met deze woorden: blaat , test

Als ik (inhoud) AGAINST ('+blaat -test') uitvoer, dan zou hij die postings dus niet moeten vinden omdat test erin voor komt, maar hij vind hem wel :?

Verwijderd

MATCH (inhoud) AGAINST ('+blaat -test' IN BOOLEAN MODE)

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

thomaske

» » » » » »

Verwijderd schreef op 06 January 2003 @ 15:45:
MATCH (inhoud) AGAINST ('+blaat -test' IN BOOLEAN MODE)
sjah, een stuk uit de manual copy-pasten kan iedereen wel.. (TangLeFuzZ heeft al aangegeven die pagine te hebben gelezen), en verder staat er bij:
As of Version 4.0.1, MySQL can also perform boolean full-text searches using the IN BOOLEAN MODE modifier.

code:
1
2
mysql> SELECT * FROM articles WHERE MATCH (title,body)
    ->     AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE);

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


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Boolean mode alleen in MySQL 4.x en hoger! :)
edit:
En ik ben weer te laat ;)

[ Voor 32% gewijzigd door Glimi op 06-01-2003 15:54 ]


  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Sorry, ik schaam me behoorlijk diep |:(

Ik had dus nog niet gezien dat je er dan ook daadwerkelijke IN BOOLEAN MODE bijachter moest drukken.

Verwijderd

thomaske schreef op 06 januari 2003 @ 15:48:
[...]
sjah, een stuk uit de manual copy-pasten kan iedereen wel.. (TangLeFuzZ heeft al aangegeven die pagine te hebben gelezen)[...]
TangLeFuzZ schreef op 06 januari 2003 @ 16:47:
Sorry, ik schaam me behoorlijk diep |:(

Ik had dus nog niet gezien dat je er dan ook daadwerkelijke IN BOOLEAN MODE bijachter moest drukken.
Blijkbaar niet dus....

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Verwijderd schreef op 06 januari 2003 @ 19:00:
[...]


[...]

Blijkbaar niet dus....
Jewel, had er overheen gelezen :)

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Met Fulltext search moet je exact het woord opgeven dat in de db staat wil je een resultaat krijgen, en niet een deel van dat woord zoals dat met like wel kan, toch?

Bijv;

In een fulltext veld in m'n tabel staat het woord: Testje

Als ik dan zoek naar 'test' vind hij hem niet, is altijd zo met fulltext search toch? Of ligt het toch aan mij? :)

Verwijderd

True :)

Ik heb bij mijn zoekding het zo gezet dat wanneer er geen resultaten zijn met match against hij gaat kijken of er wel resultaten zijn met like. Indien ze er wel zijn dan laat ik die zien maar met een melding voor de gebruiker dat het 'slechte' resultaten zijn...

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 23-08 15:45
Verwijderd schreef op 21 January 2003 @ 16:29:
True :)

Ik heb bij mijn zoekding het zo gezet dat wanneer er geen resultaten zijn met match against hij gaat kijken of er wel resultaten zijn met like. Indien ze er wel zijn dan laat ik die zien maar met een melding voor de gebruiker dat het 'slechte' resultaten zijn...
Thanks, zit wat in.
Je zou ook de aantallen kunnen vergelijken om daarna de meeste resultaten weer te geven.
Pagina: 1