Ubrzati text search u velikoj bazi, optimalni dizajn baze

Imam veliku bazu sa recenicama koje sam izvukao iz wikipedije i jos nekih drugih knjiga na eng , imam i filtrirane odredene fraze u drugoj tablici…
velicina
base1
word

Sad bi trebao ovih 500k fraza provci kroz popis recenica i izbaciti koliko ih je za pojedinu frazu (da imaju podudaranje), i isto tako njihov ID spremiti u novu tablicu jer bi na taj nacin kasnije radio brze ispis pretrage po tekstu.
Je li to dobar primjer, ili da uvedem dodatne kolone poput duzine fraze pa da na temelju toga izbacujem vani ubrzane pretrage?
Isto tako full-text search mi izbacuje za fraze od 3 rijeci popuno druge gluposti u vrhu od onih koje su totalni match. S ovim sto sam ja pokusao upit mi je po 7s, po frazi sto je neprihvatljivo.

Volio bi s kad bi mi netko pomogao oko ovih velikih baza, njihovim pretragama, i brzoj obradi jer muku mucim s istima, optimizacija upita mi nije najjaca strana, a voljan sam i platiti ispomoc.

Trenutno ove obrade vrtim doma na racunalu, i bilo bi super kad bi mogao to izvrtiti kod sebe prije nego dignem na neki VPS ili mozda nesto jace. Zato zelim to izvrtiti kod sebe i optimizirati upite zbog kasnije eventualne gnjavaze i ispravaka, a samim time i gusenja servera.
Jer prolaziti kroz 10ak gb teksta samo da izbacim par stvari nije dobro rjesjenje.

Jednostavno sam zapeo vec 2 dana na ovome i ne znam kako dalje… :slight_smile:

Stavi create statement za index koji si kreirao za full text search.

Znaci trebao bi se prebaciti s text na varchar, sto mi odgovara jer nemam puno recenica od 256 i vise znakova (nisu uniq). Sto ako koristim InnoDB i utf8_bin buduci da imam charactera izvan A-za-z0-9, pitam zbog slijedeceg?

“Note that the maximum value of the key size depends on the column charset. It’s 767 characters for a single-byte charset like LATIN1 and only 255 characters for UTF8 ( MySQL only uses BMP which requires at most 3 bytes per character)”

Ne.

Full-text indexes can be used only with InnoDB or MyISAM tables, and can be created only for CHAR , VARCHAR , or TEXT columns.

Docs.

To je greška iz razloga što type-ovi : text i varchar imaju limit za dužinu texta kod kreiranja indexa.

docs
https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html

Ti si kreirao obične indexe, evo za full text search:
https://dev.mysql.com/doc/refman/8.0/en/innodb-fulltext-index.html

CREATE TABLE opening_lines (
       id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
       opening_line TEXT(500),
       author VARCHAR(200),
       title VARCHAR(200),
      FULLTEXT idx (opening_line)
       ) ENGINE=InnoDB;

Zbunio me je error " #1170 - BLOB/TEXT column 'text' used in key specification without a key length".
image
Jedino nisam imao definiranu duzinu text kolumne, ovo postoji u bazi od prije, morat cu malo bolje proci docs, nisam bas najbolje ulovio gdje tocno grijesim… :confused: