Toon posts:

[MYsql] FullText search

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste tweak members,

Ik zit met een probleem met de mysql full text search.. Ik 2 tutorials erover gelezen op phphulp.nl en phpfreakz.nl..

Ook heb ik de search gebruikt, ik heb sommige dingen gebrobeerd of sommige antwoorden gingen boven mijn niveau.

ik gezocht onder deze url

Ik heb mysql versie: 3.23.58

Ik heb een tabel gemaakt:

amico_news
met de kolommen:
id int(5) primary key
user varchar(200)
title varchar(200)
news text
date int(10)
visits int(3)

ik heb daar 2 velden in staan:
titel: test , Amicoproject gaat van start!
en de texten doet er niet toe.

nu wou ik een search doen met de volgende code:

PHP:
1
2
3
4
5
include("lib/config.php");
$search_sql = "SELECT * FROM amico_news WHERE MATCH(title) AGAINST('Amicoproject')";
$search_query = mysql_query($search_sql);
$search_rows = mysql_num_rows($search_query);
echo $search_rows;


de php parser geeft geen errors maar maar hij geeft 0 rows terug.. weet iemand waar dit aan ligt?

[ Voor 4% gewijzigd door Verwijderd op 19-02-2004 22:54 ]


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Wij weten uiteraad niet hoe jouw database eruit ziet? Kan het zijn dat de hoofdletter roet in het eten gooit? Overigens kun je beter zoeken op [search=match+against] :)

[ Voor 4% gewijzigd door Spider.007 op 19-02-2004 22:57 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 22:15
Je wilt Full text? Deze url al doorgenomen. Je zult oa. nog "FULLTEXT (title)" moeten toevoegen aan je tabel.

Verwijderd

Topicstarter
als ik zoek op gaat of start geeft hij ook 0 rows

het type tabel is myIsam en uiteraard heb ik user,title,news fulltext gezet

PHP:
1
$search_sql = "SELECT title,MATCH(title) AGAINST('gaat') FROM amico_news";


geeft 2 resultaten :? terwijl dit 1 moet zijn..

maarja ik boek al vooruitgang...

[ Voor 42% gewijzigd door Verwijderd op 19-02-2004 23:06 ]


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 22:15
Zou het hier aan kunnen liggen, maybe?
The search for the word MySQL produces no results in the above example, because that word is present in more than half the rows. As such, it is effectively treated as a stopword (that is, a word with zero semantic value). This is the most desirable behavior -- a natural language query should not return every second row from a 1 GB table.

Verwijderd

Topicstarter
denk het niet,

omdat ik ook op worden gezocht heb die maar in een rij staan..

Ik heb ik in de search gelezen dat als er te weinig rows zijn dat hij dan geen resultatenweergeeft.. Zou dit het ook kunnen zijn?

Verwijderd

Topicstarter
het werkt nu, wel het lag er dus aan dat er te weinig rijen waren, mijn ecuses dat ik gepost heb.

Verwijderd

first :
"SELECT * bla bla bla" met nadruk op *, is eigenlijk niet netjes! dus ipv *, noemt dan de kolomnamen van je tabel.

2nd:
wanneer je een gedeelte van een tekst van je record wilt opzoeken gebruik volgende query:

SELECT ID, USER, TITLE, NEWS, DATE, VISITS FROM AMICO_NEWS WHERE UCASE(TITLE) LIKE '%AMICOPROJECT%';

gebruik dus lcase (lowercase) of ucase (uppercase) voor mobiliteit in je resultsets!! :)
veel plezier zal ik maar zeggen

tip: schrijf je query altijd in hoofdletters, lekker makkelijk onderscheiden tussen al die scripts....

Verwijderd

Topicstarter
heey, tnx voor je bericht

ik ehb trouwens een vraagje kan je ook op meerdere termen zoeken met like?

owja en ik heb het * gebruikt omdat ik alle kolummen nodig heb.. straks.

Hmzz vreemd in de manual staat dat je op meerdere kolommen kan zoeken, maar zodra ik dat probeer krijg ik een error:

SQL-query :

SELECT *
FROM amico_news
WHERE MATCH (

title, user
)
AGAINST (
'blaat'
)
LIMIT 0 , 30

MySQL retourneerde:


#1191 - Can't find FULLTEXT index matching the column list

Doe ik iets verkeerds ofzo?

[ Voor 50% gewijzigd door Verwijderd op 19-02-2004 23:57 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Ja, je moet een fulltext index zetten op alle kolommen die je ook in die combinatie wil gebruiken.

En ik heb er frankly een beetje de balen van dat dit doodleuk in de P&W FAQ staat, eigenlijk :| 't Lijkt wel of je uberhaupt grote moeite hebt met de manual lezen, want ook dat over indices staat gewoon in de manual...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

is user ook een FULLTEXT field? nee ;)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

Topicstarter
Spider.007 schreef op 20 februari 2004 @ 00:11:
is user ook een FULLTEXT field? nee ;)
Sleutelnaam Type Kardinaliteit Actie Veld
PRIMARY PRIMARY 2 id
user FULLTEXT Geen user
title FULLTEXT Geen title
news FULLTEXT Geen news 1

ja ;)

het is wel zo
als ik zoek op een kolom (user , title of news) dan vindt hij het wel goed. Maar zodra ik meerdere kolommen onderscheid met een , dan geeft hij dus die error

[ Voor 21% gewijzigd door Verwijderd op 20-02-2004 00:22 ]


Verwijderd

als je * gebruikt, heb je straks geen macht meer over welke kolom (volgorde) is eigenlijk in resultsets weergegeven, het is wel lekker makkelijk om alle kolommen in eenkeer weergegeven met een *, maar ik weet zeker, wanneer je steeds verder bent, steeds complexer met bijv. PHP (ik doe niet anders dan met JAVA werken, maar goed, SQL is een pot nat, right? :) ) scripts, zul je het probleem tegenkomen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT * 
FROM amico_news
WHERE MATCH (

title, user
)
AGAINST (
'blaat'
)
LIMIT 0 , 30 

MySQL retourneerde: 

#1191 - Can't find FULLTEXT index matching the column list


over bovenstaande query, zal zoals onderstaande query zich gedragen(denk ik):
code:
1
SELECT TITLE, USER FROM DBASE_NAAM_HIER.AMICO_NEWS WHERE NEWS = 'blaat'

of bedoel je iets anders, zoals:
code:
1
SELECT "KOLOM NAMENHIER" FROM DBASE_NAME_HIER.AMICO_NEWS WHERE UCASE(TITILE) LIKE '%BLAAT%' OR UCASE('USER') LIKE '%BLAAT%'

trouwens, je moet wel ff paar dingen onthouden, in SQL zijn er een paar "gereserveerde" woorden. het betekent dat deze woorden niet kunnen gebruiken voor bijv. tabel naam/kolomnaam etc...
ik realiseer nu pas dat je gebruik een kolom met naam USER in. en als ik goed kan herinneren, is woord USER al in gebruik door database server. of nou MySQL is of DB2, Oracle etc....

dus wijzig die maar naar andere naam .... naar USER_ID of zo..., trouwens in DB2 v. 7 (waar ik werkt) kun je geen kolom zomaar verwijderen, mijn optie zijn: "symbolic link" maken van een nieuwe tabel naar de huidige of..... huidige tabel verwijderen, en een nieuwe maken.. :(

dus...verder verdiepen zal ik maar zeggen.. :)

suc6

Verwijderd

Topicstarter
ja maar als ik zoek op title,news geeft hij ook error.

Bovendien snap ik niet echt van wat je allemaal probeert duidelijk te maken.
Pagina: 1