propage
17.09.2013, 17:07:31
w czym rózni się wyszukiwanie match against w stosunku do LIKE && ?
Chodzi mi o to czy wyszukiwanie działa jakoś inaczej ponieważ dla rekorduku
'BUTY abc'
dla like &abc& rektord zostanie odnaleziony, a dla MATCH(x) AGAINST ('abc'), rektor nie jest odnaleziony, ale dla innych fraz czasami jest odnaleziony, a czasmi nie, porpostu MATCH AGAINST raz mi działa a raz nie działa, nie potrafie znaleźć jakiegoś schematu i przyczyny czemu czasami nie działa.
pmir13
18.09.2013, 12:09:10
Match against działa o wiele szybciej niż LIKE, bo sprawdza jedynie zawartość indeksu fulltext, LIKE natomiast sprawdza wszystkie rekordy i szuka w nich podanej frazy. LIKE może wykorzystywać zwykłe indeksy o ile w wyszukiwanej frazie nie podamy '%' na początku - czyli kiedy wyszukujemy frazę, od której dany tekst się rozpoczyna. W innym przypadku sprawdzane są wszystkie rekordy, co jest dosyć wolne przy sporej ich ilości. Z kolei przy indeksach fulltext mamy pewne ograniczenia - dla wersji do 5.5 tabela musi być na silniku MyISAM, dopiero od 5.6 można tworzyć indeksy fulltext na tabelach InnoDB. Pomijane są słowa, których długość jest mniejsza niż ustalone minimum (4 znaki domyślnie, można zmienić to ustawienie), pomijane są słowa tzw. stopwords - czyli występujące bardzo często w języku angielskim (tutaj też możemy to zmienić w ustawieniach, możemy mieć własny plik z listą takich słów np polskich lub w ogóle go nie używać) oraz pomijane są słowa, które występują w co najmniej połowie rekordów tabeli. Ogólnie można powiedzieć, że LIKE to jest mało wydajna zabawka, fulltext to nieco poważniejsze rozwiązanie, które przy odpowiednich ustawieniach może zdać egzamin na całkiem sporej ilości tekstów, natomiast przy najbardziej zaawansowanych projektach wyszukiwania tekstu należałoby pomyśleć o zewnętrznych silnikach takich jak Sphinx czy Lucene.
propage
18.09.2013, 22:43:04
"Pomijane są słowa, których długość jest mniejsza niż ustalone minimum" widocznnie o to tutaj chodzi.
Jak to zmienić?
" bo sprawdza jedynie zawartość indeksu fulltext,"
nie rozumiem tego zdania, co jest zawartością fultext w takim razie?
pmir13
19.09.2013, 07:06:08
Cytat
Jak to zmienić?
Fulltext-fine-tuningCytat
nie rozumiem tego zdania, co jest zawartością fultext w takim razie?
W indeksie fulltext znajduje się lista słów wraz z odpowiadającymi im informacjami, w którym rekordzie się znajdują, jak często itp.
Mysql nie musi szukać pełnych tekstów w rekordach, wystarczy że zajrzy do tego indeksu.