Ni ipi njia bora ya kutekeleza utaftaji wa pande zote. Jinsi ya kuunda utaftaji wa sehemu kwa kutumia vihesabio vya sehemu? Kitelezi cha UI cha jQuery: kusanidi uelekezaji upya

Utafutaji uliojumuishwa ndani

Imejengwa ndani ya bidhaa

Utafutaji wa pande zote uliojengwa kwenye duka la mtandaoni - utafutaji wa ndani - hufanya kazi haraka kwa njia nyingi na haupakia mfumo.

  • Imejengwa ndani ya bidhaa
  • Haraka sana
  • Tovuti haipakii
  • Ni sehemu kuu ya API ya infoblocks
  • Haihitaji uundaji upya wa tovuti
  • Imewekwa upya kiotomatiki
Kwa nini ni haraka sana?

Mteja anaonyesha papo hapo matokeo ya utafutaji yaliyotayarishwa awali - kwa mchanganyiko wowote wa vigezo - facet. Mfumo huhesabu kabla ya vipengele vya bidhaa - makutano yote yanayowezekana ya mali hizi kwenye chujio. Seti hizi za utafutaji zilizotengenezwa tayari hutolewa kwa wateja.

Kwa nini tovuti haipakii?

Wakati wa kutoa matokeo kwa mteja, hakuna mahesabu yanayofanyika, kwa sababu matokeo tayari tayari. Sehemu ya bidhaa mpya huundwa mara moja inapoongezwa kwenye orodha ya mauzo. Utafutaji huonyeshwa upya kiotomatiki kulingana na bidhaa mpya na vipengele vipya.

Faida kwa wateja

Manufaa ya Utafutaji Uliounganishwa

Mteja wako hupata bidhaa haraka sana, akicheza kwa urahisi na mipangilio ya vichungi. Mteja hasubiri na anapokea matokeo mara moja. Kasi ya utafutaji haitegemei idadi ya vipengee kwenye katalogi.


Kichujio cha Smart 2.0

Mteja hupata bidhaa haraka

Mteja wako hupata bidhaa haraka sana kwa kupunguza mara kwa mara hoja ya utafutaji. Na kwa kila hatua, yeye hupokea matokeo mara moja - orodha ya bidhaa kwa ombi. Sio lazima asubiri ombi lake lifanyiwe kazi. Kwa sababu mfumo umehesabu chaguzi zote zinazowezekana mapema, na hutoa nafasi zilizo wazi. Hatua kwa hatua, duka la mtandaoni hutoa bidhaa kidogo na kidogo kama matokeo. Bidhaa hizi zinakaribia zaidi ombi la mteja.

Mwingiliano na multidimensionality

Uchaguzi wa bidhaa kwa mnunuzi unafanana na mchezo. Mteja huvuta vigezo (bei, uzito), hubadilisha mali (rangi, ukubwa), huweka hali ya ziada (chapa, nyenzo, ladha, nk) - na mfumo hujenga upya matokeo mara moja. Wakati huo huo, kunaweza kuwa na idadi yoyote ya vigezo vinavyoweza kubadilishwa - idadi yao haiathiri kasi ya kuzalisha matokeo.

Urahisi na urafiki

Kwa uelekezaji wa vipengele, hata mtumiaji asiye na uzoefu anaweza kuchukua bidhaa dukani kwa urahisi. Kudhibiti zana za utafutaji ni rahisi sana. Kwa kuongeza, mfumo unamhimiza mnunuzi kwa vigezo vyote ambavyo anaweza kuchagua bidhaa. Duka, kama ilivyokuwa, inaonyesha kwa mteja mali kuu ya bidhaa.

Mteja hasubiri ombi kushughulikiwa!
Kwa mfano, mteja wako ananunua kamera. Hapo awali, anataja vigezo 3 tu kwenye kichungi smart: bei, chapa, saizi. Sehemu yake inajumuisha makutano 3, kuna matokeo mengi ya utaftaji, lakini mteja hupokea mara moja. Mteja anaweka uzito - anahitaji gadget nyepesi. Mfumo mara moja, bila kuchelewa, humpa orodha ndogo ya bidhaa. Kiteja huweka ukubwa wa skrini, kisha hubainisha utendaji unaohitajika. Mbele yake - bidhaa zinazohitajika.


Kasi ya utafutaji

Kasi ya utafutaji ni muhimu

Kasi ya utafutaji huathiri idadi ya ununuzi unaofanywa

Hakuna kinachomkera mteja kama kuwa na matatizo ya kupata bidhaa kwenye tovuti yako. Mteja ataondoka kwenda kwa maduka mengine ikiwa atatafuta kwa muda mrefu sana. Hata kama duka lako lina uteuzi mkubwa wa bidhaa na zana nyingi za kuzichuja. Mteja hawezi kusubiri matokeo ya ombi.


Mafunzo ya video: Kwa nini utafutaji wa vipengele huharakisha kichujio mahiri mara nyingi
Kutumia "kipengele" huharakisha utafutaji ndani ya duka kwa utaratibu wa ukubwa. Wakati huo huo, kasi haitegemei idadi ya vitu kwenye orodha.

Kwa nini utafutaji ni wa polepole sana?
Kutafuta bidhaa mbele ya duka kunaweza kuchukua muda mrefu zaidi kuliko nyakati za kawaida za kupakia ukurasa. Hasa ikiwa kuna idadi kubwa ya bidhaa katika duka na mali ya bidhaa hizi. Hoja ya utafutaji kwa vigezo vingi huunda simu nyingi za hifadhidata na kupakia tovuti kwa kiasi kikubwa. Ikiwa kuna wateja wengi na maombi, utaftaji hupungua sana.

Kasi ya kazi ni ya kuvutia!

Matokeo ya mtihani wa toleo la 15.0 la bidhaa kwenye aina tatu za katalogi zilizo na vitu 500,000 zilionyesha kuwa ikilinganishwa na matoleo ya awali:
  • Sehemu ya kichujio mahiri - mara 15 haraka!
  • Sehemu ya Katalogi - mara 5 haraka!
Akili ya utaftaji inabaki kila wakati!

Haraka hata bila "facet"!

Bidhaa hiyo inafanya kazi kila wakati kuharakisha vipengee vya orodha yenyewe. Huduma ya Kasi ya Tovuti inaonyesha ongezeko kubwa la kasi kutoka toleo hadi toleo!

Ujenzi upya

Kuorodhesha na matokeo ya utafutaji yanaundwa upya kila mara. Kanuni ya kuorodhesha maudhui inafanyiwa kazi upya na kuharakishwa. Ubora wa uwasilishaji wa matokeo ya utafutaji unaboreshwa - hasa, "kelele" imepunguzwa. Wasanidi wanapanga kuonyesha data ya kibinafsi kwa mteja wa sasa katika matokeo ya utafutaji.

Wasanidi: Uwazi wa API


mtazamo wa zamani

Facet ina uwazi wa API

"Sehemu" iliyojengwa ndani ya bidhaa ni wazi kwa API. Ni sehemu kuu ya API ya infoblocks. Kwa hiyo, hauhitaji jitihada za ziada kwa watengenezaji kuitumia. Pia hauhitaji kuunda upya tovuti.
  • Uharakishaji wa Mbinu ya CIBlockElement::GetList
  • Ushirikiano kamili na kichujio mahiri
GetList sasa ni haraka kwa sababu inajumuisha kiotomatiki "kipengele" cha kufanya kazi. Pia kuna API tofauti kwenye D7.

Ushirikiano kamili na kichujio mahiri

Sasa, wakati wa kufanya mipangilio katika sehemu ya utawala, kwa mali ya bidhaa, huwezi kuweka tu shughuli - ikiwa utashiriki au la kushiriki katika chujio cha smart. Kwa kupitisha kipengele kwenye Kichujio Mahiri, unaweza kuchagua mara moja jinsi ya kuzionyesha. Katika fomu gani ya kuonyesha mali kwa wateja: vifungo, ukubwa, sliders, orodha ya kushuka, orodha na uchaguzi wa rangi, nk.



Onyesha Sifa katika Kichujio Mahiri

Amina kwa ubinafsishaji!

Kichujio mahiri sasa kinaonekana kupendeza zaidi. Wasanidi wanaweza kubinafsisha kwa urahisi na kubinafsisha zaidi mwonekano wake.

Tuliangalia kwa ufupi usakinishaji na syntax ya msingi ya PINQ, bandari ya PHP ya LINQ. Katika nakala hii, tutaangalia jinsi ya kutumia PINQ kuiga uwezo wa utaftaji wa MySQL.

Katika nakala hii, hatutashughulikia nyanja zote za utaftaji wa pande zote. Watu wanaovutiwa wanaweza kutafuta habari muhimu kwenye Mtandao.

Utafutaji wa kawaida wa sehemu hufanya kazi kama hii:

  • Mtumiaji huingiza neno kuu, au maneno mengi muhimu, kutafuta. Kwa mfano, "ruta" kutafuta bidhaa ambapo neno "ruta" inaonekana katika maelezo, maneno, jina la kitengo, vitambulisho, na kadhalika.
  • Tovuti inarudisha orodha ya bidhaa zinazolingana na vigezo hivyo.
  • Tovuti hutoa viungo kadhaa ili kubinafsisha maneno yako ya utafutaji. Kwa mfano, inaweza kukuruhusu kubainisha watengenezaji maalum wa vipanga njia, au kuweka masafa ya bei, au vipengele vingine.
  • Mtumiaji anaweza kuendelea kubainisha vigezo vya ziada vya utafutaji ili kupata seti ya data ya maslahi.

Utafutaji unaokabiliana ni maarufu sana na ni zana yenye nguvu ambayo inaweza kuonekana kwenye tovuti yoyote ya biashara ya mtandaoni.

Kwa bahati mbaya, utaftaji wa pande zote haujajengwa ndani ya MySQL. Kwa hivyo tunafanya nini ikiwa bado tunatumia MySQL, lakini tunataka kumpa mtumiaji fursa hii?

Kwa PINQ, ambayo inachukua mbinu sawa, yenye nguvu na rahisi, tunaweza kufikia tabia sawa na kama tunatumia injini zingine za hifadhidata.

Kupanua onyesho kutoka sehemu ya kwanza

Maoni: nambari zote kutoka kwa sehemu hii, na kutoka sehemu ya kwanza, zinaweza kupatikana kwenye .

Katika makala haya, tutapanua onyesho kutoka Sehemu ya 1 kwa uboreshaji muhimu wa utafutaji wa vipengele.

Wacha tuanze na index.php kwa kuongeza mistari ifuatayo kwake:

$app->get("demo2", kazi () tumia ($app) ( global $demo; $test2 = new pinqDemo\Demo($app); rudisha $test2->test2($app, $demo->test1 ($programu));)); $app->get("demo2/facet/(key)/(value)", chaguo la kukokotoa ($key, $value) tumia ($app) ( kimataifa $demo; $test3 = new pinqDemo\Demo($app); rudisha $test3->test3($app, $demo->test1($app), $key, $value); ));

Njia ya kwanza inatupeleka kwenye ukurasa ili kuona machapisho yote yanayolingana na utafutaji wa maneno muhimu. Ili kuweka mfano rahisi, tunachagua vitabu vyote kutoka kwa jedwali la kitabu_kitabu. Pia itaonyesha seti ya data inayotokana na seti ya viungo ili kuboresha vigezo vya utafutaji.

Katika programu halisi, baada ya kubofya viungo kama hivyo, vichungi vyote vya sehemu vitarekebisha kwa maadili ya mipaka ya hifadhidata inayotokana. Kwa hivyo, mtumiaji ataweza kuongeza maneno mapya ya utafutaji kwa mpangilio, kwa mfano, chagua kwanza mtengenezaji, kisha ubainishe bei, n.k.

Lakini katika mfano huu, hatutatekeleza tabia hii - vichungi vyote vitaonyesha maadili ya mipaka ya hifadhidata asili. Hiki ni kikomo cha kwanza na mgombea wa kwanza wa kuboresha katika onyesho letu.

Kama unavyoona katika msimbo hapo juu, vitendaji halisi viko katika faili nyingine inayoitwa pinqDemo.php . Wacha tuangalie nambari inayofaa ambayo hutoa uwezo wa utaftaji wa pande zote.

Darasa la kipengele

Kwanza kabisa, wacha tuunde darasa ambalo linawakilisha kipengele. Kwa ujumla, kipengele kinapaswa kuwa na sifa kadhaa:

  • Data ambayo inafanya kazi nayo Data ya $)
  • Ufunguo ambao kikundi kinafanywa ( $key)
  • Aina ya ufunguo (aina ya $). Inaweza kuwa mojawapo ya yafuatayo:
    • taja kamba kamili, kwa mechi halisi
    • taja sehemu ya kamba (kawaida ya kwanza), kwa kulinganisha muundo
    • bainisha anuwai ya thamani kwa kundi kwa masafa
  • ikiwa aina ya ufunguo ni anuwai ya maadili, ni muhimu kufafanua hatua ya thamani ili kuamua mipaka ya chini na ya juu ya masafa; au ikiwa aina ni sehemu ya mfuatano, ni lazima ubainishe ni herufi ngapi za kwanza zitatumika kuweka kambi ($range)

kupanga vikundi- sehemu muhimu zaidi ya kipengele. Taarifa yoyote iliyojumlishwa ambayo kipengele kinaweza kurejesha inategemea vigezo vya kupanga. Kwa kawaida, vigezo vya utafutaji vinavyotumiwa zaidi ni "Kamba Kamili", "Sehemu ya Kamba", au "Msururu wa Maadili".

Nafasi ya majina classFacet ( tumia Pinq\ITraversable, Pinq\Traversable; class Facet ( public $data; // Halisi ya hifadhidata umma $key; // shamba kwa kundi kwa umma $type; // F: kamba nzima; S: masharti ya kuanza; R : range; public $range; // ni muhimu tu ikiwa $type != F ... kazi ya umma getFacet() ( $filter = ""; ikiwa ($this->aina == "F") // kamba nzima ( ... ) elseif ($this->aina == "S") // mwanzo wa mfuatano ( ... ) elseif ($this->aina == "R") // masafa ya thamani ( $ filter = $this ->data ->groupBy(function($row) ( return floor($row[$this->key] / $this->range) * $this->range; )) ->select(function (ITraversable $data) ) ( return ["key" => $data->last()[$this->key], "count" => $data->count()]; )); ) rudisha $filter; ) ) )

Kazi kuu ya darasa hili ni kurudisha mkusanyiko wa data uliochujwa kulingana na mkusanyiko asilia wa data na sifa za kipengele. Inaweza kuonekana kutoka kwa msimbo kwamba mbinu tofauti za data ya kikundi hutumiwa kwa aina tofauti za akaunti. Katika nambari iliyo hapo juu, tumeonyesha jinsi nambari inaweza kuonekana ikiwa tutapanga data kwa anuwai ya maadili na hatua iliyoainishwa katika mbalimbali $.

Weka vipengele na uonyeshe data ya awali

Jaribio la utendaji wa umma2($app, $data) ( $facet = $this->getFacet($data); rudisha $app["twig"]->render("demo2.html.twig", array("facet" = > $facet, "data" => $data)); ) kazi ya kibinafsi getFacet($originalData) ( $facet = array(); $data = \Pinq\Traversable::from($originalData); // mifano 3 ya uundaji vitu tofauti vya sehemu, na kurudisha sehemu $filter1 = new \classFacet\Facet($data, "author", "F"); $filter2 = new \classFacet\Facet($data, "title", "S", 6 ) ; $filter3 = new \classFacet\Facet($data, "bei", "R", 10); $facet[$filter1->key] = $filter1->getFacet(); $facet[$filter2-> key ] = $filter2->getFacet(); $facet[$filter3->key] = $filter3->getFacet(); return $facet; )

Katika getFacet() njia, tunafanya yafuatayo:

  • Badilisha data asili kuwa Pinq\Traversable object kwa usindikaji zaidi
  • Tunaunda vipengele vitatu. Kipengele cha 'mwandishi' kitapanga kulingana na uga wa mwandishi, na kitapanga kwa safu mlalo yote; kipengele 'kichwa' - kwa uga wa kichwa uliopangwa kwa sehemu ya mstari (kwa herufi 6 za kwanza); kipengele ‘bei’ - kwa uga wa bei uliopangwa kulingana na masafa (katika nyongeza za 10)
  • Mwishowe, tunatoa vipengele na kuvirudisha kwa kitendakazi cha test2 ili viweze kutolewa kwa kiolezo cha kuonyesha.

Pato la vipengele na data iliyochujwa

Mara nyingi, vichujio vitaonyeshwa kama kamba, na vitasababisha mwonekano wa matokeo yaliyochujwa.

Tayari tumeunda njia ("demo2/facet/(key)/(thamani)") ili kuonyesha matokeo ya utafutaji wa vipengele na viungo vya kuchuja.

Njia inachukua vigezo viwili, kulingana na ufunguo unaochujwa na thamani ya ufunguo huo. Kitendaji cha test3 ambacho kimefungwa kwa njia hii kinaonyeshwa hapa chini:

Jaribio la utendakazi wa umma3($app, $originalData, $key, $value) ($data = \Pinq\Traversable::from($originalData); $facet = $this->getFacet($data); $filter = null; ikiwa ($key == "mwandishi") ( $filter = $data ->where(function($row) tumia ($value) ( return $row["author"] == $value; )) ->orderByAscending( function($row) tumia ($key) ( return $row["price"]; )) ; ) elseif ($key == "bei") ( ... ) else //$key== title ( .. . ) rudisha $app["twig"]->render("demo2.html.twig", array("facet" => $facet, "data" => $filter)); )

Kimsingi, kulingana na ufunguo, tunatumia chujio (kazi isiyojulikana mahali ambapo kifungu) kulingana na thamani iliyopitishwa na kupata seti inayofuata ya data iliyochujwa. Tunaweza pia kuweka mpangilio ambao data inachujwa.

Hatimaye, tunatoa data asili (pamoja na vichujio) kwenye kiolezo. Njia hii hutumia kiolezo kile kile tulichotumia kwenye demo2.

upau wa utafutaji

    (% kwa k, v katika sehemu %)
  • ((k|weka mtaji))
    • (% kwa vv katika v %)
    • ((vv.hesabu))((vv.ufunguo))
    • (%endfor%)
    (%endfor%)

Lazima tukumbuke kwamba vipengele vinavyotokana na programu yetu ni safu zilizowekwa. Katika ngazi ya kwanza, hii ni safu ya vipengele vyote, na kwa upande wetu kuna tatu kati yao (kwa mtiririko huo, kwa mwandishi , kichwa , bei).

Kila kipengele kina safu ya thamani-msingi, kwa hivyo tunaweza kuipitia kwa njia za kawaida.

Angalia jinsi tunavyounda URL ya viungo vyetu. Tunatumia vitufe vya kitanzi cha nje (k) na vitufe vya kitanzi cha ndani (vv.key) kama vigezo vya njia ("demo2/facet/(key)/(thamani)"). Ukubwa wa safu (vv.count) hutumika kuonyeshwa kwenye kiolezo.

Picha ya kwanza inaonyesha seti asili ya data, huku picha ya pili ikichujwa kwa bei kutoka $0 hadi $10 na kupangwa na mwandishi.

Sawa, tumeweza kuiga utafutaji wa vipengele katika programu yetu!

Kabla ya kumalizia kifungu hiki, ni muhimu kuangalia mwisho kwa mfano wetu na kuamua ni nini kinachoweza kuboreshwa na ni mapungufu gani tunayo.

Maboresho yanayowezekana

Kwa ujumla, hii ni mfano wa msingi sana. Tumepitia tu sintaksia na dhana za kimsingi na kuzitekeleza kama mfano wa kufanya kazi. Kama ilivyoelezwa hapo awali, tuna maeneo machache ambayo yanaweza kuboreshwa kwa urahisi zaidi.

Tunahitaji kutekeleza kigezo cha utafutaji cha "wekelea", kwa kuwa mfano wa sasa unatuwekea kikomo cha uwezo wa kutumia uchujaji wa utafutaji kwenye mkusanyiko wa data asilia pekee, haiwezekani kutumia utafutaji wa vipengele kwenye matokeo ambayo tayari yamechujwa. Huu ndio uboreshaji mkubwa zaidi ninaoweza kufikiria.

Vikwazo

Utafutaji wa sehemu uliotekelezwa katika kifungu hiki una mapungufu makubwa (ambayo labda yanatumika kwa utekelezaji mwingine wa utaftaji wa sehemu pia):

Tunachota data kutoka kwa MySQL kila wakati

Programu tumizi hii hutumia mfumo wa Silex. Kama ilivyo kwa mfumo wowote wa ingizo kama vile Silex, Symfony, Laravel, faili yake ya index.php (au app.php) huitwa kila mara njia inapochanganuliwa na utendakazi wa kidhibiti kutekelezwa.

Ukiangalia msimbo katika index.php yetu, utagundua kuwa safu ifuatayo ya msimbo:

$demo = pinqDemo mpya\Demo($app);

inaitwa kila ukurasa wa programu unapoonyeshwa, ambayo ina maana kwamba mistari ifuatayo ya msimbo inatekelezwa kila wakati:

Onyesho la Darasa ( private $books = ""; kazi ya umma __construct($app) ( $sql = "chagua * kutoka kwa agizo la kitabu_kitambulisho kwa kitambulisho"; $this->books = $app["db"]->fetchAll($sql );)

Ingekuwa bora ikiwa hatungetumia mfumo? Naam, licha ya ukweli kwamba kuendeleza programu bila mifumo sio wazo nzuri, naweza kusema kwamba tutakutana na matatizo sawa: data (na hali) haijahifadhiwa kati ya maombi tofauti ya HTTP. Hii ni sifa ya msingi ya HTTP. Hii inaweza kuepukwa kwa kutumia mifumo ya caching.

Tulihifadhi hoja chache za SQL kwa kutumia vipengele. Badala ya kupitisha hoja moja iliyochaguliwa ili kuleta data, na tatu kwa makundi kulingana na hoja zenye vifungu vinavyofaa, tulitekeleza swali moja tu, na tukatumia PINQ kupata maelezo yaliyojumlishwa.

Hitimisho

Katika sehemu hii, tumetekeleza uwezo wa kutafuta sehemu kupitia mkusanyiko wa vitabu. Kama nilivyosema, huu ni mfano mdogo tu ambao bado una nafasi ya kuboresha na una mapungufu kadhaa.

Mtu wa kisasa anajaribu kutumia muda kidogo na kidogo katika ununuzi. Katalogi za bidhaa polepole huwafukuza wateja, duka hupoteza wateja na sehemu ya faida. Fanya duka lako la mtandaoni livutie zaidi ukitumia teknolojia yenye sura Inakabiliwa - i.e. iliyofafanuliwa awali. tafuta. Unda fahirisi za sehemu na kuongeza kasi ya utafutaji wa bidhaa na kazi ya orodha nzima.

Kumbuka: Injini ya utaftaji ya pande zote inapatikana kutoka toleo la 15.0.1 la moduli Vitalu vya habari na kuunganishwa na sehemu Sehemu- hii ni msimbo wa programu iliyoundwa katika shell inayoonekana ambayo hufanya kazi maalum ya moduli yoyote ya kuonyesha data katika Sehemu ya Umma. Tunaweza kupachika kizuizi hiki cha msimbo kwenye kurasa za tovuti bila kuandika msimbo moja kwa moja. kichujio mahiri Sehemu huandaa kichujio cha kuchagua kutoka kwa kizuizi cha habari na huonyesha fomu ya kichujio cha vipengee vya kuchuja. Kipengee lazima kiunganishwe kabla ya kipengee cha kutoa kipengee cha katalogi, vinginevyo orodha ya vipengee haitachujwa. Sehemu hiyo ni ya kawaida, imejumuishwa kwenye kifurushi cha usambazaji wa moduli na ina violezo vitatu: .chaguo-msingi, kuona_usawa Na taswira_wima. (Mifumo miwili ya mwisho haitumiki, na imeachwa kwa sababu za uoanifu.)

Katika mhariri wa kuona, sehemu iko kando ya njia Maudhui > Katalogi > Kichujio Mahiri.

Sehemu hiyo ni ya moduli ya Vitalu vya Habari.

Pata maelezo zaidi kuhusu utafutaji wa vipengele

Hebu tuunde fahirisi za sehemu katika hatua chache rahisi:

Je, ninahitaji kuunda upya faharasa zenye sura?

Faharasa zinazokabiliana huundwa upya kiotomatiki au unahitaji kuziunda upya mwenyewe, kulingana na vitendo vilivyofanywa:

Moja kwa moja Imeongezwa mpya au iliyohaririwa iliyopo bidhaa.
usiunde mali mpya.
Kwa mikono Mfumo utakuhimiza na ujumbe juu ya kurasa
sehemu ya utawala.
Imeongezwa mpya au iliyohaririwa sehemu za saraka.
Wakati wa kuongeza mali mpya au kufuta mali kutoka kichujio mahiri.
Wakati wa kupakua bidhaa, kwa mfano, kutoka 1C, ikiwa bidhaa kuunda mali mpya.

Utafutaji unaokabiliana huboresha kazi ya katalogi ya bidhaa. Ili kuitumia unahitaji:

  1. Unda faharisi zenye sehemu kwa orodha ya bidhaa;
  2. Tazama onyo kuhusu hitaji la kuunda upya faharasa mwenyewe.

Katika makala hii (kiwango cha webmaster - juu), tutazungumzia kuhusu, kuingiliana kwa njia tofauti, kinachojulikana. urambazaji wa pande zote. Ili kurahisisha unyambulishaji wa nyenzo, ninapendekeza upitie nakala ya Wikipedia "Uainishaji wa sura" na machapisho kwa Kiingereza (lakini kwa picha!) "Unda urambazaji bora zaidi wa tovuti zako".

Usogezaji unaokabiliana uliochujwa kulingana na rangi au anuwai ya bei unaweza kuwa muhimu kwa wageni wako, lakini mara nyingi hudhuru kutafuta kwa kuunda michanganyiko ya anwani nyingi na yaliyomo nakala. Kwa sababu ya nakala, injini za utafutaji hazitaweza kutambaa kwa haraka kwenye tovuti kwa masasisho ya maudhui, ambayo huathiri ipasavyo indexing. Ili kupunguza tatizo hili na kusaidia wasimamizi wa tovuti kufanya utafutaji wa usogezaji wa vipengele vyake kuwa rafiki, tungependa:

Inafaa kwa watumiaji na utafutaji wa Google

Njia wazi ya kurasa za bidhaa/makala:

Inawakilisha URL ya ukurasa wa kategoria:
http://www.example.com/category.php?category=gummy-pipi

Inawakilisha URL ya bidhaa mahususi:
http://www.example.com/product.php?item=swedish-fish

Nakala zisizohitajika zinazosababishwa na urambazaji wa pande zote

Ukurasa huo huo unapatikana kutoka kwa anwani tofauti za wavuti:

Ukurasa wa kisheria



URL: example.com/product.php? bidhaa=samaki-wa-swedi

Rudufu ukurasa



URL:example.com/product.php? item=swedish-samaki&category=gummy-pipi&bei=5-10


kategoria=pipi-za-gummy&taste=sour&bei=5-10

Makosa:

  • Haileti maana kwa Google, kwani watumiaji mara chache hutafuta [$9:55 marmalade].
  • Haileti akili kwa watambazi kupata kipengee sawa ("saladi ya matunda") kutoka kwa kurasa za kategoria kuu (ama "Gummi" au "Sour Gummy").
  • Hoja mbaya kwa mmiliki wa tovuti, kwa sababu maombi ya kuorodhesha hupunguzwa kwa matoleo mengi ya aina moja.
  • Hatua mbaya kwa mmiliki wa tovuti, kwa sababu ni mzigo usio na maana na usiohitajika kwenye bandwidth ya tovuti
Kurasa tupu:


URL: example.com/category.php? category=gummy-pipi&taste=sour&bei=zaidi ya-10

Makosa:

  • Nambari iliyopewa vibaya kwa injini za utaftaji (katika kesi hii, ukurasa unapaswa kutoa nambari 404)
  • Ukurasa tupu kwa watumiaji


Suluhu mbaya zaidi (zisizo kirafiki) za usogezaji wa vipengele

Mfano #1: Vigezo visivyo vya kawaida vinatumika katika URL: koma na mabano, badala ya ufunguo=thamani&:

  • example.com/category? [ category:gummy-candy ][ sort:price-low-to-high ][ sid:789 ]
  • example.com/category?category , gummy-pipi , sort , lowtohigh , sid , 789
Jinsi ya:
example.com/category? category=gummy-pipi&sort=chini-hadi-juu&sid=789

Mfano #2: Kutumia saraka au njia za faili badala ya chaguo katika orodha za thamani ambazo hazibadilishi maudhui ya ukurasa:
example.com/c123/s789/product?swedish-fish
(ambapo /c123/ ni kategoria, /s789/ ni kitambulisho cha kipindi, ambacho hakibadilishi maudhui ya ukurasa)

Uamuzi mzuri:

  • mfano.com /gummy-pipi/ product?item=swedish-fish&sid=789(saraka, /gummy-pipi/, inabadilisha yaliyomo kwenye ukurasa kwa njia ya maana)
Uamuzi bora zaidi:
  • example.com/product?item=swedish-fish& category=gummy-pipi&sid=789 (Vigezo vya URL vinatoa unyumbulifu zaidi kwa injini za utafutaji ili kubaini jinsi ya kutambaa kwa ufanisi)
Ni vigumu kwa watambaji kutofautisha thamani muhimu (kwa mfano "gummy-pipi") kutoka kwa thamani zisizo na maana (kwa mfano "SESSIONID") wakati maadili haya yanawekwa moja kwa moja kwenye njia ya kiungo. Kwa upande mwingine, vigezo vya URL hutoa unyumbulifu kwa injini tafuti kuangalia kwa haraka na kubainisha wakati thamani fulani haihitaji ufikiaji wa kutambaa kwa tofauti zote.

Thamani za kawaida ambazo hazibadilishi yaliyomo kwenye ukurasa na zinapaswa kuorodheshwa kama vigezo vya URL ni pamoja na:

  • Kitambulisho cha Kipindi
  • Ufuatiliaji wa kitambulisho
  • Vitambulisho vya kirejeleaji
  • Mihuri ya nyakati
Mfano #3: Badilisha thamani zinazozalishwa na mtumiaji (inawezekana zisizo na kikomo) kuwa vigezo vya URL ambavyo vinaweza kutambaa na kuorodheshwa lakini visivyofaa kwa utafutaji.
Kwa kutumia data ndogo inayotolewa na watumiaji wa tovuti (kama vile longitudo/latitudo au "siku zilizopita") katika URL zilizotambazwa na faharasa:
  • example.com/pata-daktari? radius=15&latitudo=40.7565068&longitudo=-73.9668408
  • example.com/article?category=health& siku zilizopita=7
Jinsi ya:
  • example.com/pata-daktari? city=san-francisco&neighborhood=soma
  • example.com/articles?category=health& tarehe=januari-10-2014
Badala ya kuruhusu mtumiaji kuzalisha maadili ili kuzalisha URL zinazoweza kutambaa (kusababisha uwezekano usio na mwisho na thamani ndogo sana kwa wageni), ni bora kuchapisha kitengo cha ukurasa kwa maadili maarufu zaidi, na maelezo ya ziada yanaweza kujumuishwa ili kufanya ukurasa zaidi. muhimu kuliko ukurasa wa kawaida wa utafutaji wenye matokeo. Vinginevyo, unaweza kufikiria kuweka thamani zinazozalishwa na mtumiaji katika saraka tofauti na kisha kutumia robots.txt kuzima kutambaa kutoka kwenye saraka hiyo.
  • mfano.com /kuchuja/ tafuta-daktari?radius=15&latitudo=40.7565068&longitudo=-73.9668408
  • mfano.com /kuchuja/ makala?category=afya&siku- zilizopita=7
Na katika robots.txt:
Wakala wa mtumiaji: *
Usiruhusu: /kuchuja/

Mfano #4. Kuongeza vigezo vya URL bila mantiki.

  • mfano.com /gummy-pipi/lollipops/gummy-pipi/ gummy-pipi/bidhaa?samaki-wa-swedi
  • example.com/product? paka=pipi-gummy&paka=lollipops&paka=pipi-gummy&paka=pipi-gummy&item=samaki-wa-swedi
Uamuzi mzuri:
  • example.com /gummy-candy/ product?item=swedish-fish
Uamuzi bora zaidi:
  • example.com/product? item=swedish-fish&category=gummy-pipi
Vigezo vya ziada vya URL huongeza urudufishaji tu, na kwa sababu hiyo, tovuti haijatambazwa kwa ufanisi na kuorodheshwa. Kwa hiyo, ni muhimu kuondokana na vigezo vya URL visivyohitajika na mara kwa mara kusafisha viungo vya taka kabla ya kuzalisha URL mpya. Ikiwa vigezo vingi vinahitajika kwa kipindi cha mtumiaji, inawezekana kuficha habari katika vidakuzi, badala ya kuongeza maadili kila wakati, kama paka=pipi-gummy&paka=lollipops&paka=pipi-gummy& ...

Mfano #5: Pendekeza uboreshaji zaidi (kuchuja) wakati kuna matokeo yasiyofaa.

Vibaya:
Ruhusu watumiaji kuchagua vichujio wakati kuna vipengee batili vya kuchuja.


Uboreshaji kwa ukurasa usio na matokeo (kwa mfano, bei=zaidi ya-10), ambayo hufadhaisha watumiaji na kusababisha maswali yasiyo ya lazima kwa injini za utafutaji.

Jinsi ya:
Unda viungo wakati tu kuna vipengele vya kuchagua. Ikiwa matokeo ni sifuri, weka kiungo kama "kijivu" (yaani, kisichoweza kubofya). Ili kuboresha zaidi utumiaji, zingatia kujumuisha kiashirio cha hesabu ya bidhaa karibu na kila kichujio.


Kuonyesha ukurasa ulio na matokeo sufuri (kwa mfano, price=over-10) hairuhusiwi, pamoja na kwamba ni marufuku kwa watumiaji kubofya bila ya lazima, na kwa injini za utafutaji kutambaa kwenye ukurasa huu usio na manufaa.

Ni muhimu kuzuia URL zisizo za lazima na kupunguza nafasi ya wageni kwa kuzalisha URL wakati bidhaa zinapatikana tu. Hii itasaidia kuwaweka watumiaji wanaohusika kwenye tovuti yako (mibofyo machache ya vitufe vya nyuma wakati hakuna bidhaa inayopatikana), kupunguza idadi ya URL zinazowezekana zinazojulikana kwa injini tafuti. Pia, ikiwa ukurasa "haupo kwa muda" tu lakini kuna uwezekano wa kuwa na taarifa muhimu, zingatia kuupa msimbo wa majibu 404. Kwenye ukurasa wa 404, unaweza kubuni ujumbe muhimu kwa watumiaji walio na chaguo zaidi za kusogeza au kisanduku cha kutafutia ili watumiaji waweze kupata bidhaa zinazohusiana.

Kwa tovuti mpya ambazo wasimamizi wa tovuti wanazingatia kutekeleza urambazaji wa vipengele, kuna chaguo kadhaa za kuboresha kutambaa (mkusanyiko wa anwani kwenye tovuti yako inayojulikana na Googlebot) wa kurasa za kipekee za maudhui na kupunguza uwekaji faharasa wa injini ya utafutaji ya kurasa rudufu (ujumuishaji wa mawimbi ya faharasa).

Bainisha ni vigezo gani vya URL vinavyohitajika ili injini tafuti kutambaa kila ukurasa wa maudhui (yaani, bainisha ni vigezo gani vinavyohitajika ili kuunda angalau njia moja ya kubofya kwa kila kipengee). Vigezo vinavyohitajika vinaweza kujumuisha item-id , category-id , ukurasa n.k.

Bainisha ni vigezo vipi vitasaidia wageni na hoja zao, na ni vipi vina uwezekano mkubwa wa kusababisha kurudiwa katika kutambaa na kuorodhesha. Katika mfano wa confectionery (marmalade), kigezo cha URL cha "onja" kinaweza kuwa muhimu kwa watumiaji walio na maswali katika mfano. ladha=chachu . Walakini, ni jambo la busara kuzingatia parameta ya "bei" kama inayosababisha marudio yasiyo ya lazima category=pipi-pipi&ladha=chachu& bei=zaidi ya-10 . Mifano mingine ya kawaida:

  • Vigezo vya thamani kwa injini za utafutaji: item-id , category-id , name , brand ...
  • Vigezo visivyo vya lazima: kitambulisho cha kikao , anuwai ya bei ...
Fikiria kutekeleza mojawapo ya chaguo kadhaa za usanidi kwa URL zilizo na vigezo visivyohitajika. Hakikisha tu kwamba vigezo vya URL "visivyohitajika" havihitajiki kwa kutambaa na watambazaji au kwa mtumiaji kupata kila bidhaa mahususi!

Chaguo 1: na viungo vya ndani

Weka alama kwenye URL zote zisizo za lazima na . Hii itapunguza gharama za kazi za roboti ya utafutaji na kuzuia kupungua kwa mzunguko wa skanning. Unahitaji kudhibiti utambazaji duniani kote kupitia robots.txt (Maelezo ya Mtafsiri: angalia makala "").
Tumia sifa ya rel="canonical" kutenganisha kurasa za faharasa ya utafutaji na kurasa zisizohitajika hapo (kwa mfano, kwenye ukurasa. bei=5-10 unaweza kuandika sifa ya rel="canonical", ikionyesha aina ya marmalade yote ya sour example.com/category.php?category=gummy-pipi&taste=sour& ukurasa=wote ).

Chaguo 2: Robots.txt na Usiruhusu

URL zilizo na vigezo visivyohitajika zimejumuishwa katika saraka ya /kuchuja, ambayo itafungwa katika robots.txt (kataza usiruhusu). Hii itaruhusu injini zote za utafutaji kutambaa tu "sahihi" intralink (maudhui) ya tovuti, lakini itazuia kutambaa URL zisizohitajika mara moja. Kwa mfano ( example.com/category.php?category=gummy-pipi), ikiwa vigezo muhimu vilikuwa kipengee, kategoria, na ladha, na kitambulisho cha kipindi na bei hazihitajiki, basi URL ya ladha itakuwa:
example.com/category.php?category=gummy-pipi& ladha=chachu, lakini vigezo vyote visivyo vya lazima, kama vile bei, URL itajumuisha katika saraka iliyoainishwa awali - /kuchuja/:
mfano.com /kuchuja/ category.php?category=gummy-pipi&price=5-10,
ambayo itapigwa marufuku kupitia robots.txt:
Wakala wa mtumiaji: *
Usiruhusu: /kuchuja/

Chaguo 3: Tenganisha wapangishi

Hakikisha masuluhisho bora yaliyoorodheshwa hapo juu (kwa anwani taka, kwa mfano) bado yanatumika. Vinginevyo, injini za utaftaji tayari zimeunda misa kubwa ya kiunga kwenye faharisi. Kwa hivyo, kazi yako italenga kupunguza ukuaji zaidi wa kurasa zisizo za lazima zinazotazamwa na Googlebot na kuunganisha ishara za indexing.

Tumia vigezo vilivyo na usimbaji wa kawaida na umbizo la key=value.

Hakikisha kuwa thamani ambazo hazibadilishi maudhui ya ukurasa, kama vile vitambulisho vya kipindi, zinatekelezwa kama key=value, si saraka.

Usiruhusu mibofyo na usitengeneze URL wakati hakuna vipengele vya kuchuja.

Ongeza mantiki kwenye ramani ya kigezo cha URL: ondoa vigezo visivyohitajika badala ya kuongeza thamani kila wakati (k.m. epuka kutoa kiunga kama hiki: example.com/product?cat=gummy-pipi&cat=lollipops &cat=gummy-pipi&item=swedish-fish).

Hifadhi vigezo muhimu katika URL kwa kuviorodhesha kwanza (kwa sababu URL zinaonekana kwenye matokeo ya utafutaji) na vigezo visivyofaa sana mwishowe (kama vile kitambulisho cha kipindi).
Epuka muundo huu wa kiungo: example.com/category.php? session-id=123&tracking-id=456&category=gummy-pipi&taste=sour
Rekebisha mipangilio ya URL katika Zana za Wasimamizi wa Tovuti ikiwa una ufahamu wazi wa jinsi viungo kwenye tovuti yako hufanya kazi.

Hakikisha kuwa unapotumia JavaScript ili kudhibiti maudhui (kupanga/chujio/kuficha) bila kusasisha URL, kuna anwani halisi za wavuti kwenye tovuti yako ambazo zina thamani ya utafutaji, kama vile kategoria kuu na kurasa za bidhaa, ambazo zinaweza kutambaa na kuorodheshwa . Jaribu kutotumia ukurasa wa nyumbani pekee (yaani URL moja) kwa tovuti yako yote, lakini ubadilishe maudhui ya urambazaji kupitia JavaScript - hii, kwa bahati mbaya, itawapa watumiaji URL moja tu katika utafutaji. Pia, hakikisha kwamba utendakazi hauathiri vibaya uchujaji unaobadilika, kwani utazuia mtumiaji kufanya kazi na tovuti.

Boresha uwekaji faharasa wa kurasa tofauti za maudhui sawa kwa kubainisha sifa ya rel="kanoni" kwenye toleo la upendeleo la ukurasa. Sifa ya rel="canonical" inaweza kutumika ndani ya kikoa kimoja au zaidi.

Boresha uwekaji faharasa wa maudhui ya "paginated" (k.m. page=1 na page=2 kutoka kategoria ya "pipi za gummy") kwa (ama):

  • Ongeza sifa ya rel="kanoni" kwa msururu wa kurasa zinazobainisha kategoria ya kisheria yenye kigezo cha "view-all" (k.m. ukurasa=1, ukurasa=2, na ukurasa=3 kutoka kategoria ya "pipi za gummy" yenye rel= " kisheria” on category=gummy-pipi&page=all), kuhakikisha kuwa ukurasa unafaa kwa watumiaji na hupakia haraka.
  • Tumia pagination markup rel="next" na rel="prev" ili kuonyesha uhusiano kati ya kurasa binafsi (ona "Paginaton with rel="next" na rel="prev" ") .
Jumuisha viungo vya kisheria pekee kwenye ramani za tovuti.

Katika somo la leo, tutajaribu kuunda upya utaftaji ulioigizwa (wenye sura) kwa kutumia Javascript. Ninamaanisha kuwa tayari unajua utaftaji wa sura ni nini kwa kusoma somo hili, vinginevyo google au angalia amazon au onyesho langu.

Kwanza tunahitaji maktaba ya github.com/eikes/facetedsearch. Ipakue na ujumuishe faili ya facetedsearch.js katika mradi wetu. Pia tutahitaji maktaba za jQuery na Underscore.

Kanusho: Ninaelewa kuwa JQ si keki tena, lakini ukiitumia kama sukari ya kisintaksia ya kawaida, unaweza kuikata katika maktaba zinazojulikana zaidi au vanilla JS.

Kwa hivyo kwanza, wacha tufanye alama rahisi na utegemezi uliounganishwa:

hati

// Hapa ndipo tutatoa vichungi vya sehemu
// Na hapa kutakuwa na vipengele vyetu

Sasa tunahitaji kuelezea mipangilio ya programu yetu na kuunda kiolezo cha kuonyesha vipengele ambavyo tutapanga kwa kutumia vipengele:

Kweli, tengeneza safu ya JSON yenyewe na vitu vya kuonyesha katika utaftaji wetu wa sura katika JS:

Var items = [ ( "firstname": "Mary", "lastname": "Smith", "imageURL": "http://lorempixel.com/150/150/cats/2", "description": "Sed Ea Amet. Stet Voluptua. Nonumy Magna Takimata ", "category": "Mouse", "language": ["Smalltalk", "XSLT"], "continent": "Africa" ​​​​), ( "firstname": "Patricia ", "lastname": "Johnson", "imageURL": "http://lorempixel.com/150/150/cats/3", "description": "Ut Takimata Sit Aliquyam Labore Aliquyam Sit Sit Lorem Amet. Ipsum Rebum ." , "category": "Simba", "continent": "Amerika ya Kaskazini" ​​), ... ];

Ningeweka safu hii katika faili tofauti ya JS ambayo ingeundwa kwa nguvu, kutoka kwa hifadhidata, kwa mfano.

Ni hayo tu, tunapata utafutaji wa pande zote katika JavaScript na tunaweza kuubinafsisha. Ifuatayo, ninatoa hati zilizotafsiriwa za maktaba, ambapo unaweza kutazama vichochezi unavyohitaji.

Nyaraka

Kazi

Vitendaji viwili vinasafirishwa kwa nafasi ya majina ya jQuery.

facetelize Hutumika kuanzisha utafutaji wa vipengele na mipangilio iliyotolewa.

facetUpdate Inaweza kutumika ikiwa unataka kubadilisha hali ya kuangalia sura kutoka nje.

Mipangilio ya Kitu

vipengee: Msururu wa vipengee vya kuchujwa na kupangwa katika mchakato.

facets: Kitu ambacho funguo zake zinalingana na vitufe vya kipengele na thamani ndicho kichwa cha kipengele hiki. Vipengee vitachujwa kulingana na thamani iliyo nayo kwa funguo hizo.

orderByOptions: Sawa na vipengele, isipokuwa jozi hizi za vitufe/thamani zinatumika kwa kupanga tu. Wakati ufunguo wa RANDOM umewashwa, matokeo yanaweza kuwa nasibu.

facetSelector: Hiki ndicho kiteuzi ambacho kinatumika kupata nodi ya DOM ambapo vichujio vya sehemu huchaguliwa.

resultSelector: Hiki ndicho kiteuzi kinachotumika kupata nodi ya DOM ambapo matokeo yanaonyeshwa.

resultTemplate: Mfuatano ambao unatumiwa na injini ya kiolezo cha Underscore kutoa kila kipengele kutoka kwa safu ya vipengee. Sifa zifuatazo zinaongezwa kwa kila kipengele ambacho kinaweza pia kutumika katika kiolezo: batchItemNr , batchItemCount , na totalItemCount .

hali: Kitu hiki huhifadhi vichujio vya sasa, aina: currentResult na wengine. Unaweza kutoa agizoKwa mfuatano au kitu cha vichujio ili kuvisanidi mapema.

enablePagination: Boolean kuwezesha paginalor na kitufe cha "pakia zaidi", kweli kwa chaguomsingi.

paginationHesabu: Ikiwa utaftaji umewashwa, huweka idadi ya vipengee kwa kila ukurasa, chaguo-msingi ni 50.

facetSortOption: Tumia chaguo hili la kukokotoa kubadilisha mpangilio wa vipengele vya sehemu. Huchukua kipengee ambapo funguo zinalingana na majina ya sehemu na thamani katika safu ya thamani za sehemu, ambazo zinaweza kupangwa kwa mpangilio ambao ungependa kuziona. Mfano huu utapanga mabara kwa mpangilio tofauti, vipengele ambavyo havijajumuishwa katika safu vitaongezwa kwa mpangilio wa alfabeti:

FacetSortOption: ("bara": ["Amerika ya Kaskazini", "Amerika ya Kusini"])

Kuna violezo kadhaa zaidi, tafadhali angalia msimbo wa chanzo facetedsearch.js ili kuona chaguo zote za violezo vinavyopatikana.

Matukio

Unaweza kushurutisha kwa baadhi ya matukio ambayo yanapaswa kutuma arifa wakati hatua fulani imefanyika. Ili kufanya hivyo, tunatumia mfumo wa tukio la jQuery:

facetuicreated: Unaweza kusainisha chaguo hili la kukokotoa kwa kipengee cha DOM settings.facetSelector ambacho kinafaa kuarifiwa wakati UI imeundwa.

facetedsearchresultupdate: Unaweza kusongeza kitendakazi hiki kwa kipengee cha DOM cha settings.resultSelector ili kuarifiwa kuhusu matokeo ya sasisho.

facetedsearchfacetclick: Tukio hili hutupwa wakati sehemu inapobofya na kuwaka kwenye kipengee cha settings.facetSelector. Ambayo hupokea kitambulisho cha sura kama hoja.

facetedsearchorderby: Tukio hili huwashwa wakati kipengele cha kupanga kinapobofya kwenye kipengee cha settings.facetSelector. Inapokea agizo la kitambulisho kama hoja.

$(settings.resultSelector).bind("facetedsearchresultupdate", function()( // fanya kitu, labda ));