MySQL Полнотекстового Որոնման

Այսօր ես խաղում օպտիմալացման կամաց-կամաց SQL հայտը տեսակի

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

Որտեղ проблемном պահին այստեղ – վերջին մասը ‘%word%’ եւ ավելի կոնկրետ ՝ ի նշան % բառով, համար, ինչ մենք անում ենք,. Խմբային նիշ խորհրդանիշ % ,ցանկացած նշանակության, մենք հարցումը անմիջականորեն փոխարկվում է ուղղակիորեն կամաց-կամաց, քանի որ, այսպիսով, հարցումը չի ՞ նչն է մեզ խանգարում օգտագործել ինդեքսները դաշտում. Որոշումը, ինչպես միշտ էլ կան, բայց միշտ չէ, որ պարզ է, 😆 Ընդհանուր առմամբ MySQL դուք ունեք այս խնդրի լուծումը полнотекстовый որոնում индексирование դաշտերը. Ինչպես փոփոխություն է տեղի ունենում տուփի բազմաթիվ գրված փաստաթղթերը, բայց համառոտ նկարագրել, թե ինչպես է փոխվում այս հարցում, քանի որ մենք կստանանք մի փոքր թատրոնը, ի վերջո,. Արել, թե ինչպես է կիրառվում fulltext դաշտ բարձր է, հարցումը պետք է փոփոխություններ տեսակի:

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

Այսպիսով, կառուցվածքը ' ակնհայտ է և քննարկման կարիք ունի ավելորդ. Այս պահանջը կարող է ուժի մեջ մտնել, եթե բառը, որի համար դուք հարցում եք կատարում, գոնե 4 նիշ, լռելյայն արժեքը, եթե դուք ցանկանում եք փոխել այն, դուք պետք է նշեք նշանակությունը, "която ցանկանում իմ.кнф է частта [тузды] հայտարարությամբ ft_min_word_len=3 կամ 2, 1 չի e добър избор 😉ակնհայտ է . Այն բանից հետո, երբ դուք փոխում եք ձեր նշանակություն եւ վերսկսել mysql server-a դուք պետք է անել repair սեղանների նրա, որպեսզի նոր ինդեքսը ուժի մեջ է մտնում. Այստեղ ամեն ինչ պարզ է: ես փոփոխություններ, վերսկսել է, ребилдвам ինդեքսները, եւ իմ հարցումը և ինձ վերադարձնում է 0 կարգը 😀 Խորհրդակցեք

SHOW VARIABLES

Ես տեսնում եմ, որ արժեքները, ես հարցրեցի, ուժի մեջ է մտել, ребилдвам ոչ պակաս, ինդեքսները – նույն արդյունքը. 🙄 Անհարմար է, շատ անհարմար է. Այստեղից սկսվել է մի մեծ ругаене եւ քերծվածքներից բանալի պարզվում են 😀 Որը հայտնվել է շատ, բավականին հետաքրքիր է. Ընդհանուր առմամբ, ինչպես սկսեցի կարդալ փաստաթղթերը, ես չգիտեմ, թե ինչ ճանապարհ է եւ եկել հետաքրքիր է անցնում

Այս մեթոդը ավելի լավ է աշխատում մեծ հավաքածու (իրականում, նա ուշադիր է տրամադրված: այդպիսով). Համար շատ փոքր սեղաններ, բաշխումը բառերի ոչ համարժեք արտացոլում են նրանց իմաստալից նշանակությունը, and this model may sometimes produce results bizarre. Օրինակ, although the word "MySQL is ներկա in every row of the table articles shown earlier, a search for the word produces no-results

ГРЕДА 😳 Կտամ табличката մի беше մալկան – այնուամենայնիվ, դա փորձություն է. Մեր հարցումները մեկ մեծ սեղան ավելի քան 2 000 000 կարգը եւ այնտեղ բաներ պատահար. Դե դա ակնհայտ խնդիրը. Որպեսզի հասկանանք որոշումը, նշեմ հակիրճ, որ full text search աջակցում է 3 ընդլայնված ռեժիմում Տրամաբանական , ԱՐՏԱՀԱՅՏՈՒԹՅՈՒՆՆԵՐԻ ու ԲՆԱԿԱՆ ԼԵԶՈՒՆ թե ինչպես է վերջինս աշխատում է լռելյայն. Տարբեր եղանակները կարելի է գտնել փաստաթղթերի, ես բացատրել, 2-3 խոսքի համար BOOLEAN, քանի որ այնտեղ ամեն ինչ գործն է. Այն աջակցում է տրամաբանական օպերատորներ տեսակի AND, Կամ , NOT եւ այլն, եւ կարելի է անել տարբեր spells սիրված արտահայտություններ, կան, ոչ թե մեկ այլ, եւ այլն. Աջակցում եւ խորհրդանիշների *, ինչը համարժեք է подстановочных նիշ % 😉 Այն օգտակար է, երբ դուք փնտրում խոսքը տակ չափը ft_min_word_len կամ փոքր trays ;). Գոնե ինձ մոտ սեղանի շուրջ 100 գիծ են կատարյալ. Մնացել է միայն տեսնել դիմում-հայտը:

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

Ահա հիմա գալիս է մի պահ, արդյոք մենք աշխատել կաղապար ինդեքսավորման նիշ – պատասխան-ես չգիտեմ. Ընդհանրապես, ես կարծում եմ,, որ, քանի որ ասված է այլ կերպ փաստաթղթերը, սակայն փաստաթղթերի հստակ չեն ասում կամ ցույց են տալիս շատ բաներ 😀

Ընդլայնված by Zemanta

2 comments

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

Leave a Reply

Ձեր email address will not be published. Պարտադիր դաշտերը նշված են *

Հակա-սպամ *