MySQL Plena Teksto Serĉo

Hodiaŭ mi ludis optimumigi malrapida SQLa Apliko de la genro

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

Kie estas la problemo nun tie – la lasta parto '% word%’ kaj eĉ pli specifaj karakteroj % antaŭ la vorto, farantojn. ĵokero simbolo % ,antaŭ ajna valoro, rekte igas nin konsulti rekte en malrapida, ĉar tio la apliko haltas nin uzi indeksoj Kampo. Decidoj kiel ĉiam, sed ne ĉiam klara 😆 Entute MySQL Ili havas solvon por tiu problemo plenteksta serĉo indeksado kampo. Kiel ŝanĝi la kampo havas multajn skribita dokumentado, sed rapidado priskribos kiel ŝanĝi la supro peto, ĉar ni ricevos por iom dramo finfine. Sledka kiel aplikebla plena teksto kampo supre, apliko devas esti ŝanĝoj en la tipo:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

Do la strukturo estas evidenta kaj ne bezonas nenecesa diskuto. La supre sercxmendo ekvalidos, se la vorto, cxar vi fari peton almenaŭ 4 simboloj, La defaŭlta valoro estas, se vi volas modifi devas specifi la valoro, която желаете в my.cnf в частта [mysqld] deklaracio ft_min_word_len= 3 aŭ 2, 1 не е добър избор очевидно 😉 . Post vi ŝanĝas la valoron kaj rekomenco mysql servilo-bezono fari riparon en via tabloj, ordo por la nova indeksado ekvalidos. Ĝis nun ĉio klara: fari ŝanĝojn, reset, rebildvam indeksoj kaj fari mian deziron kaj revenoj 0 Kontrolanta kun la celo 😀

SHOW VARIABLES

Mi vidas ke la valoroj, Mi demandis en forto, rebildvam denove indeksoj – sama rezulto. malagrabla 🙄, tre malkomforta. De tie sur ĝi komencis grandan malbenado gratante la ŝlosilo al la barako 😀 kiu estis tute, sufiĉe interesa. sur la tuta, Mi komencis legi dokumentaron ne scias kiun vojon kaj venis al interesa paŝo

Such a technique works best with large collections (fakte, estis zorge agordita tiel). Por tre malgrandaj tabloj, vorto distribuo ne adekvate reflekti ilia semantika valoro, kaj tiu modelo povas foje produkti bizaraj rezultoj. Ekzemple, kvankam la vorto "MySQL" ĉeestas en ĉiu vico de la artikoloj tablo montris pli frue, serĉo por la vorto ne produktas rezultojn

ГРЕДА 😳 Дам табличката ми беше малка – Tamen ĝi estis testo. Nia apliko en granda tablo super 2 000 000 ordon kaj aferoj dormis. Nu nun klara problemo. Fari klaran decidon, Mi mencios koncize, kiu elportu tekstoserĉon 3 altnivela reĝimo Buleaj , ESPRIMOJ kaj NATURA LINGVO kiel la lasta laboro defaŭlte. Por modoj povas kontroli dokumentado, Mi klarigos al 2-3 думи за BOOLEAN понеже в него е разковничето. Той поддържа логически оператори от типа AND, OR , NOT и прочие и може да се правят разни магии с търсените фрази, да има една, да няма друга и прочие. Поддържа и символа *, който е еквивалент на wildcard символа % 😉 Той е полезен, когато търсената дума е под дължината на ft_min_word_len или за малки таблички ;). Поне при мен на таблица с около 100 реда върши идеална работа. Остана само да видим и завършената заявка:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

Тука вече идва момент дали ни работи индексирането с wildcard символаотговорът е не знам. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Plibonigita per Zemanta

2 komentoj

    1. Е при големи таблици вече има други решения 😉 partitions да речем или други механизмни за fulltext search като Sphinx

Lasi Respondon

Via # retpo? to adreso ne estos eldonita. Bezonata kampoj estas markitaj *

Anti SPAMO *