MySQL Volledige Teks Soek

Vandag het ek gespeel vir die optimalisering van die stadige SQL aansoek op die vorm

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

Waar is die probleem hier – die laaste deel van die ‘%woord%’ en in'n selfs meer spesifieke teken % voor die woord, vir wat ons doen. Wildcard simbool % ,om enige waarde, ons versoek direk vertaal direk te stadig, want op hierdie manier die navraag nie verhoed dat ons van die gebruik van indekse op die veld. Die oplossing soos altyd is, maar dit is nie altyd duidelik 😆 in die Algemeen MySQL jy het'n oplossing vir hierdie probleem fulltext soektog kruip velde. As daar is'n verandering boks'n baie geskryf in die dokumentasie, maar ek sal kortliks beskryf hoe om dit te verander navraag, want ons ontvang'n klein teater uiteindelik. Het hoe om aansoek te doen die fulltext boks bo, die versoek moet word om veranderinge in die tipe:

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

Dus, die struktuur is voor die hand liggend en moet geen onnodige bespreking. Hierdie navraag sal in werking tree, as die woord, vir wat jy maak die versoek, ten minste 4 karakters, die standaard waarde, as jy wil om dit te verander, moet jy spesifiseer'n waarde, която желаете в my.cnf в частта [tusdi] 'n verklaring ft_min_word_len=3 of 2, 1 не е добър избор очевидно 😉 . Nadat jy verander die waarde en begin mysql bediener-jy moet doen herstel tabelle dit, ten einde vir die nuwe indeks in werking getree het. Hier, alles is duidelik: Ek maak veranderinge, weer te begin, rebeldom indekse en maak'n versoek en ek opbrengste 0 om 😀 Raadpleeg

SHOW VARIABLES

Ek sien dat die waardes, Ek het gevra, in werking geloop, rebeldom, indekse – dieselfde resultaat. 🙄 Ongemaklik, baie ongemaklik. Hier en dan begin een groot Rogaine en skrape vir'n sleutel in die skuur 😀 Wat was baie, baie interessant. In Die Algemeen, Ek het begin om te lees die dokumentasie, ek weet nie wat die pad en het gekom om'n interessante verloop

Such a technique works best with large collections (in werklikheid, was dit deeglik ingeskakel op hierdie manier). Vir baie klein tafels, woord verspreiding nie voldoende weerspieël hul semantiese waarde, en hierdie model kan soms produseer bisarre resultate. Byvoorbeeld, hoewel die woord "MySQL" is teenwoordig in elke ry van die artikels tabel getoon vroeër, 'n soektog vir die woord produseer geen resultate

ГРЕДА 😳 Дам табличката ми беше малка – nog steeds, dit was'n toets. Ons navrae in een groot tafel met meer as 2 000 000 orde en dinge voorval. Wel, dit is'n voor die hand liggende probleem. Ten einde te verstaan die besluit, Ek kortliks daarop, wat beteken volledige teks soek ondersteuning 3 gevorderde af BOOLE , UITDRUKKINGS en NATUURLIKE TAAL as onlangse werk deur verstek. Vir die verskillende vorme kan gevind word in die dokumentasie, Ek sal verduidelik 2-3 woorde vir BOOLE, want dit is alles oor. Dit word ondersteun deur logiese operateurs EN, OF , NIE, en so meer, en jy kan doen verskillende spel met die gewilde frases, daar, nie die ander en so aan. Ondersteun en simbole *, gelykstaande aan wildcards % 😉 Dit is nuttig, wanneer jy soek vir die woord onder die grootte ft_min_word_len of klein bakkies ;). Ten minste het ek het die tafel rond 100 lyne is perfek. Jy hoef net om te sien die voltooide aansoek:

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

Nou hier kom die oomblik of ons werk met'n wildcard kruip karakters – отговорът е не знам. Принципно мисля, че да, защото не е казано друго в документацията, но в документацията очевидно не се казват или показват много неща 😀

Versterk deur Zemanta

2 comments

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

Laat'n Antwoord

Jou e-posadres sal nie gepubliseer word nie. Vereiste velde is gemerk *

Die Anti-SPAM *