Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Fulltext search separator

[es] :: MySQL :: Fulltext search separator

[ Pregleda: 1051 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

S A J A
Beograd

Član broj: 226539
Poruke: 1904
*.static.sbb.rs.



+421 Profil

icon Fulltext search separator25.05.2021. u 03:30 - pre 34 meseci
Zna li neko kako mogu da isključim da znak "-" bude separator kod pretrage? Imam dosta modela pa ako neko ukuca recimo GT-1000 onda mu neće naći. To mi je baš problem. Ne mogu da se načudim koji genije je smislio da "-" bude separator ;)
 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1904
*.static.sbb.rs.



+421 Profil

icon Re: Fulltext search separator25.05.2021. u 11:14 - pre 34 meseci
Uspeo sam da nađem da se ovo menja u fajlovima koji stoje u folderu /sql/share/charsets.
https://dev.mysql.com/doc/refman/8.0/en/character-arrays.html

Onda se nađe fajl prema charsetu, ja koristim utf8mb4 i collation 0900_ai_ci ali nema takvih fajlova u folderu (?!). Evo šta sve ima:

Directory of D:\Wamp64\bin\mysql\mysql8.0.21\share\charsets

armscii8.xml
ascii.xml
cp1250.xml
cp1251.xml
cp1256.xml
cp1257.xml
cp850.xml
cp852.xml
cp866.xml
dec8.xml
geostd8.xml
greek.xml
hebrew.xml
hp8.xml
Index.xml
keybcs2.xml
koi8r.xml
koi8u.xml
latin1.xml
latin2.xml
latin5.xml
latin7.xml
macce.xml
macroman.xml
README
swe7.xml


Koji je od ovih fajlova za utf?

I kad ga nađem, šta treba da promenim da bih dodao "-" da bude deo reči? Tamo su sve neki brojevi.

Ovde ima primer kako da se doda "&" ali se nigde ne spominje utf8 charset. Tamo piše, "ako imaš charset latin1, onda otvoriš fajl latin1.xml, ubaciš te brojeve, restartuješ i to je to". A šta ako ne koristim latin1 već utf8 za koji ne postoji xml fajl?
https://stackoverflow.com/ques...ampersand-in-fulltext-searches
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.com
Via: [es] mailing liste

Sajt: mysql.rs


+2377 Profil

icon Re: Fulltext search separator25.05.2021. u 12:29 - pre 34 meseci
utf kolacije su ubildovane u mysql, moras da napravis svoju novu
kolaciju i dodas svoju kolaciju. imas ovde primer

https://mysql.rs/razno/sortiranje-po-azbuci-azbuka-i-mysql/
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Fulltext search separator25.05.2021. u 12:37 - pre 34 meseci
a sto se tice boolean separatora, ako se ja dobro secam nemaju nikakve veze sa kolacijom vec sa ft_boolean_syntax

Code:

> show global variables like 'ft%';
+--------------------------+----------------+
| Variable_name            | Value          |
+--------------------------+----------------+
| ft_boolean_syntax        | + -><()~*:""&| |
| ft_max_word_len          | 84             |
| ft_min_word_len          | 4              |
| ft_query_expansion_limit | 20             |
| ft_stopword_file         | (built-in)     |
+--------------------------+----------------+
5 rows in set (0.01 sec)


promeni ft_boolean_syntax i rebilduj indekse
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Fulltext search separator25.05.2021. u 13:04 - pre 34 meseci
Citat:
S A J A:
Ne mogu da se načudim koji genije je smislio da "-" bude separator ;)


- je operator od kada je izmisljen, samim tim se podrazumeva da je i separator

Code:

mysql [localhost:8023] {msandbox} (test) > select * from t1 where match(a) against('GT-100' in natural language mode);
+----+--------+
| id | a      |
+----+--------+
|  9 | GT-100 |
+----+--------+
1 row in set (0.00 sec)

mysql [localhost:8023] {msandbox} (test) > select * from t1 where match(a) against('100' in natural language mode);
+----+--------+
| id | a      |
+----+--------+
|  9 | GT-100 |
+----+--------+
1 row in set (0.00 sec)

mysql [localhost:8023] {msandbox} (test) > select * from t1 where match(a) against('-100' in natural language mode);
+----+--------+
| id | a      |
+----+--------+
|  9 | GT-100 |
+----+--------+
1 row in set (0.00 sec)

mysql [localhost:8023] {msandbox} (test) > select * from t1 where match(a) against('-100' in boolean mode);
Empty set (0.00 sec)



 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1904
*.static.sbb.rs.



+421 Profil

icon Re: Fulltext search separator25.05.2021. u 13:44 - pre 34 meseci
Citat:
bogdan.kecman:
promeni ft_boolean_syntax i rebilduj indekse


Stavio sam SET GLOBAL ft_boolean_syntax = '+ _><()~*:""&|'; (donja crtica umesto minusa)

Upisalo se u show global variables like 'ft%';

Re-indeksirao sam (skroz sklonio indeks i stavio novi)

Međutim, kad probam pretragu MATCH (naslov) AGAINST ('+gt-1000*' IN BOOLEAN MODE) opet ne izlazi

Preko NATURAL MODA radi, ali taj mod je neupotrebljiv jer zahteva da se upiše cela reč. Meni treba pretraga po početku reči, tako je valjda normalno da bude.
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Fulltext search separator25.05.2021. u 14:00 - pre 34 meseci
moja greska, sorry, ft_boolean_syntax nije implementiran za innodb jos uvek :(

Code:

mysql [localhost:8023] {msandbox} (test) > alter table t1 engine=myisam;
Query OK, 14 rows affected (0.04 sec)
Records: 14  Duplicates: 0  Warnings: 0

mysql [localhost:8023] {msandbox} (test) > select * from t1 where match(a) against('+-100*' in boolean mode);
+----+-----------+
| id | a         |
+----+-----------+
|  9 | GT-100    |
| 12 | GT-1000   |
| 13 | GT-10000  |
| 14 | GT-100000 |
+----+-----------+
4 rows in set (0.00 sec)

mysql [localhost:8023] {msandbox} (test) > alter table t1 engine=innodb;
Query OK, 14 rows affected (0.84 sec)
Records: 14  Duplicates: 0  Warnings: 0

mysql [localhost:8023] {msandbox} (test) > select * from t1 where match(a) against('+-100*' in boolean mode);
ERROR 1064 (42000): syntax error, unexpected '-'
mysql [localhost:8023] {msandbox} (test) >



 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Fulltext search separator25.05.2021. u 14:03 - pre 34 meseci
odes na https://bugs.mysql.com/bug.php?id=71551 i kliknes na "I'm affected", sto vise ljudi trazi pre ce se implementirati

 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1904
*.static.sbb.rs.



+421 Profil

icon Re: Fulltext search separator25.05.2021. u 14:31 - pre 34 meseci
Citat:
bogdan.kecman: odes na https://bugs.mysql.com/bug.php?id=71551 i kliknes na "I'm affected", sto vise ljudi trazi pre ce se implementirati


Afektovao sam se ;)

Mada, taj task je otvoren 2014 godine a piše Severity: S2 (Serious). Kako li tek tretiraju neke bezvezne stvari ;)

Dakle, da rezimiramo:

BOOLEAN mod: ne radi pretraga ako reč ima minus ali radi po početku reči (ne mora da se kuca cela reč)
NATURAL mod: radi pretraga ako ima minus u reči ali mora da se ukuca cela reč doslovce (znači kad tražiš nešto, moraš da ukucaš nekoliko puta, jednina, množina, po padežima...)

Drugim rečima, nisu ga baš nešto dobro napravili. Očigledno se taj fulltext search ne koristi nešto mnogo čim je ovako obogaljen.

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.dynamic.sbb.rs.

Sajt: mysql.rs


+2377 Profil

icon Re: Fulltext search separator25.05.2021. u 14:53 - pre 34 meseci
ima ukupno 5 affected usera, ne racuna see to u ozbiljan bag, to sto mu je user stavio S2 ne znaci da mi mislimo da je S2 ... on nije nista vise od "feature request" severity status

FTS see mnogo koristio sa myisam, ali posto je myisam retardiran a innodb ga nije podrzavao dugo 99% ljudi kojima treba FTS su presli na mysql innodb + sphinx http://sphinxsearch.com/ i to radi mega do jaja dobro tako da kada smo mi konacno implementirali fts u innodb to niko ozbiljan ne koristi (bar ja ne znam nijednog paying customera koji to koristi ozbiljno) tako da je ta implementacija ostala tu gde jeste..

inace evo sad gledam, "savet" za tvoj problem je da imas jos jedno "virtualnu" polje koji FTS indexiras umesto originalnog (originalno ne indexiras uopste) a u to "virtualno" polje ubacis string bez tog minusa, tj bez svih specijalnih karaktera i onda radis match po tom polju a radis select originalnog koje koristis ... to radi super kao workaround za ovaj tip problema

 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1904
*.static.sbb.rs.



+421 Profil

icon Re: Fulltext search separator25.05.2021. u 20:47 - pre 34 meseci
Nije loš ovaj Sphinx mada, realno, baš me mrzi da i njega implementiram. Meni je dovoljan i ovaj obogaljeni FTS ;)

Problem sa minusom sam "rešio" tako što ga konvertujem u donju crtu. Na klijentu uradim string.replaceAll('-','_') a kod čitanja sa servera obrnuto pa bude SELECT id, REPLACE(naslov, '_', '-') as naslov...

Tako da, to lepo funkcioniše, jedino što je budževina pa mi to malo smeta, ali šta da se radi...
 
Odgovor na temu

nkrgovic
Nikola Krgović
Beograd

Član broj: 3534
Poruke: 2807

ICQ: 49345867
Sajt: https://www.twinstarsyste..


+655 Profil

icon Re: Fulltext search separator25.05.2021. u 21:28 - pre 34 meseci
A ako imas stvarno donju crtu, onda i nju konvertujes u - iako je orginalno _ ?
Please do not feed the Trolls!

Blasphemy? How can I blaspheme? I'm a god!'
 
Odgovor na temu

S A J A
Beograd

Član broj: 226539
Poruke: 1904
*.static.sbb.rs.



+421 Profil

icon Re: Fulltext search separator25.05.2021. u 23:41 - pre 34 meseci
Citat:
nkrgovic: A ako imas stvarno donju crtu, onda i nju konvertujes u - iako je orginalno _ ?


Da, tako je. Ovde se neće koristiti donje crte jer oblast nema veze sa IT-om već sa muzikom. Tu zaista donje crte nemaju šta da traže. Pogotovo u naslovima koji će biti public. Šta više, nisam ni ljubitelj tih donjih crta jer poružnjuju tekst. Sad mi pade ideja da stavim još jedan replace na klijentu. replaceAll('_',' '). Dobra stvar kod Javascripta je što ovi replaceovi mogu da se nanižu jedan za drugim što je prilično zgodno ;)

Mada, sad nešto gledam... moraću još tu karaktera da escapujem. FTS u boolean modu ne radi dobro kad dobije sve ove znake: +, >, <, (, ), ~, *, ". Upravo sam probao. Moraću i to da hendlam...

[Ovu poruku je menjao S A J A dana 26.05.2021. u 00:58 GMT+1]
 
Odgovor na temu

[es] :: MySQL :: Fulltext search separator

[ Pregleda: 1051 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.