Ինչպես ավելացնել որոնում ձեր հավելվածին. պարզ ֆիլտրերից մինչև լրիվ տեքստային որոնում
Հավելվածին որոնում ավելացնելու համար սկսեք ամենապարզ աշխատող բանից․ որոնման տուփ, որ կանչում է սերվերային երթուղի, որ զտում է տվյալների բազայի տողերը՝ հարցումը համապատասխանեցնելով մի քանի սյունակի հետ, գումարած զտիչներ այնպիսի բաների համար, ինչպիսիք են կատեգորիան կամ գինը։ Երբ դա բավարար չէ․ երբ պետք է արդյունքների դասավորում, բառերի արմատների հաշվառում կամ շատ գրառումներ՝ անցեք տվյալների բազայի լրիվ տեքստային որոնմանը, և միայն եթե պետք է ուժեղ սխալների հանդուրժողականություն կամ արագ արդյունքներ շատ մեծ տվյալների վրա՝ անցեք հոստված որոնիչի։ Ինչ էլ որ ընտրեք, որոնումը պետք է հարգի թույլտվությունները․ օգտատերերը երբեք չպետք է գտնեն գրառումներ, որ իրենց տեսնելու իրավունք չունեն։
Ինչ է նշանակում «որոնում» ձեր հավելվածի համար
Որոնումը մի քանի տարբեր բան է ընդգրկում, և շատ հավելվածներին պետք է ավելի քան մեկը․
- Բանալի բառով որոնում․ տեքստային տուփ՝ «գտիր ցուցակները, որ նշում են «այգի»»։
- Զտիչներ․ կառուցվածքային ընտրություններ՝ կատեգորիա, քաղաք, գնի տիրույթ, ամսաթիվ, կարգավիճակ։
- Դասավորում․ ամենանորը, ամենաէժանը, ամենահամապատասխանը։
- Ավտոլրացում․ առաջարկներ մուտքագրելիս։
- Սխալների հանդուրժողականություն․ «restuarant»-ը դեռ գտնում է «restaurant»-ը։
Դիրեկտորիայի, աշխատանքի հայտարարությունների կայքի կամ խանութի համար զտիչները հաճախ ավելի կարևոր են, քան տեքստի տուփը։ Նախքան գործիք ընտրելը որոշեք, թե որոնցից իրականում պետք են։
Ձեր տարբերակները
| Մոտեցում | Ինչպես է աշխատում | Ամենալավը՝ | Սահմանափակումներ |
|---|---|---|---|
| Զտում բրաուզերում | Բեռնել ցուցակը, զտել JavaScript-ով | Փոքր հանրային ցուցակներ (մի քանի հարյուր տարր) | Բոլոր տվյալները ուղարկվում են յուրաքանչյուր այցելուին․ մեծ ցուցակների հետ դանդաղ է |
| Տվյալների բազայի նմուշի համապատասխանություն | Սերվերային հարցում՝ «անվանումը պարունակում է տեքստը», մեծատառ չզգայուն | Փոքր և միջին հավելվածներ, ադմին գործիքներ | Դասավորում չկա․ կարող է դանդաղել մեծ աղյուսակներում․ արմատներ չկան |
| Տվյալների բազայի լրիվ տեքստային որոնում | Postgres-ը ինդեքսավորում է բառերը և դասավորում համապատասխանությունները | Բովանդակությամբ հարուստ հավելվածներ | Թույլ է սխալների դեմ, եթե չավելացնեք մոտավոր համապատասխանություն |
| Մոտավոր համապատասխանություն (trigram) | Postgres-ը համեմատում է նիշերի հաջորդականությունները նմանության համար | Անուններ, կարճ դաշտեր, սխալների հանդուրժողականություն | Պահանջում է ընդլայնում և ինդեքս․ կարգավորումը ժամանակ է խլում |
| Հոստված որոնիչ | Առանձին ծառայություն ինդեքսավորում է ձեր տվյալները (Algolia, Meilisearch, Typesense, Elasticsearch և այլն) | Մեծ կատալոգներ, ակնթարթային որոնում, ուժեղ սխալների հանդուրժողականություն | Մեկ այլ ծառայություն՝ համաժամեցնելու, վճարելու և ապահովելու համար |
Եթե ձեր տվյալները արդեն Postgres-ում են, դրա ներկառուցված լրիվ տեքստային որոնումը ուժեղ միջանկյալ տարբերակ է։ Այն բառերը բաժանում է, կրճատում դրանք արմատների (այնպես որ «running»-ը համապատասխանում է «run»-ին), անտեսում է ընդհանուր բառերը և կարող է դասավորել արդյունքները՝ ըստ համապատասխանության։ Ճիշտ ինդեքսով այն մնում է արագ մեծ աղյուսակներում։
Օրինակ հրամաններ
Պարզ սկիզբ․
Ավելացրու որոնման տուփ և զտիչներ listings էջին։ Որոնումը պետք է համապատասխանի հարցումը title և description դաշտերին՝ մեծատառ չզգայուն։ Զտիչներ․ կատեգորիա (բացվող ցուցակ), քաղաք (բացվող ցուցակ) և առավելագույն գին։ Որոնումը արա սերվերում էջավորված API երթուղիով, 20 արդյունք էջում։ Պահիր որոնումը և զտիչները URL-ում, որ արդյունքները կարողանան կիսվել, և հետ կոճակը աշխատի։ Ցույց տուր հասկանալի դատարկ վիճակ, երբ ոչինչ չի համապատասխանում։
Ավելի լրիվ տեքստային որոնման անցում․
Փոխիր listing-ների որոնումը Postgres լրիվ տեքստային որոնման՝ title (ավելի բարձր կշռով) և description-ի վրա։ Ավելացրու ճիշտ ինդեքսը, դասավորիր արդյունքները՝ ըստ համապատասխանության, և պահիր գոյություն ունեցող զտիչներն ու էջավորումը։ Մի փոխիր գոյություն ունեցող տվյալները։
Անունների սխալների հանդուրժողականություն ավելացնելու համար․
Ավելացրու մոտավոր համապատասխանություն բիզնեսի անվան վրա, որ փոքր սխալները դեռ գտնեն արդյունքներ։ Օգտագործիր trigram նմանություն, եթե հասանելի է, ինդեքսով, և վերադարձիր ընթացիկ որոնմանը, եթե ոչ։
Քայլ առ քայլ
- Թվարկեք, թե ինչ են մարդիկ որոնում։ Ո՞ր դաշտերը (վերնագիր, նկարագրություն, պիտակներ, անուն)։ Ո՞ր զտիչները։ Հարցրեք մի քանի իրական օգտատեր, եթե կարող եք։
- Սկսեք սերվերից։ Ավելացրեք API երթուղի, որ ընդունում է հարցումն ու զտիչները և վերադարձնում է մեկ էջ արդյունքներ։ Մի բեռնեք ամեն ինչ բրաուզերում։
- Կիրառեք թույլտվությունները հարցումում։ Եթե օգտատերերը տեսնում են միայն իրենց գրառումները կամ միայն հրապարակվածները, այդ պայմանը պետք է լինի նույն հարցումում, ինչ որոնումը։
- Ավելացրեք էջավորում սկզբից․ էջերի համարներ կամ «բեռնել ավելին»։
- Դրեք որոնման վիճակը URL-ում (օրինակ՝
?q=garden&city=leeds)։ Կիսվող հղումներ, աշխատող հետ կոճակ, և որոնիչները կարող են ինդեքսավորել զտված էջերը, եթե ցանկանում եք։ - Կարգավորեք մուտքագրելիս որոնումը (debounce)։ Սպասեք մի քանի հարյուր միլիվայրկյան, երբ մուտքագրումը դադարում է, նախքան հարցում անելը, որ ամեն ստեղնի սեղմման համար հարցում չուղարկվի։
- Ավելացրեք ինդեքսներ, երբ գիտեք, թե որ սյունակներով եք զտում և որոնում։
- Թարմացրեք լրիվ տեքստային որոնման, ապա մոտավոր համապատասխանության, ապա հոստված որոնիչի՝ միայն երբ ավելի պարզ քայլը ձախողվում է իրական օգտատերերի հետ։
- Փորձարկեք իրատեսական տվյալներով․ հարյուրավոր կամ հազարավոր տողեր, անսովոր նիշեր, դատարկ հարցումներ, շատ երկար հարցումներ, այլ լեզուներ, եթե աջակցում եք դրանց։
Հաճախակի սխալներ
- Ամբողջ աղյուսակը բեռնել բրաուզերում։ 50 տարրի համար լավ է, 50,000-ի համար ցավալի է, և բացահայտում է յուրաքանչյուր գրառում, ներառյալ այն, որ օգտատերը չպետք է տեսնի։
- Որոնում, որ անտեսում է թույլտվությունները։ Որոնումը սովորական արտահոսք է․ անձնական կամ նախագիծ գրառումը հայտնվում է, որովհետև հարցումը մոռացել է «միայն իմը» կամ «միայն հրապարակվածը» պայմանը։
- SQL կառուցել օգտատիրոջ չմշակված մուտքից։ Միշտ օգտագործեք պարամետրացված հարցումներ։ AI կառուցողը սովորաբար դա անում է, բայց ստուգեք, եթե տեսնում եք տողեր, որ միացված են իրար։
- Դատարկ վիճակի բացակայություն։ «Արդյունքներ չկան» հաղորդագրությունը առաջարկով (մաքրել զտիչները, ստուգել ուղղագրությունը) պահում է մարդկանց հեռանալուց։
- Ինդեքսների բացակայություն։ Որոնումը հաճելի է թեստային տվյալներով և դանդաղում է, երբ իրական տվյալները աճում են։
- Ջոկատել բջջայինը։ Զտիչները պետք է տեղավորվեն հեռախոսի էկրանին․ զտիչների դարակը կամ ծալվող վահանակը սովորաբար ավելի լավ է աշխատում, քան կողային վահանակը։
Ստուգացանկ
- Գիտեք, թե որ դաշտերում է որոնումը և ինչ զտիչներ կան
- Որոնումը աշխատում է սերվերում և վերադարձնում է էջավորված արդյունքներ
- Հարցումը կիրառում է նույն թույլտվությունները, ինչ հավելվածի մնացած մասը
- Օգտատիրոջ մուտքը փոխանցվում է որպես պարամետր, երբեք SQL-ում չի միացվում
- Որոնման վիճակը գտնվում է URL-ում
- Մուտքագրումը կարգավորված է (debounce)
- Որոնված և զտված սյունակները ինդեքսավորված են
- Դատարկ, չգտնված և սխալի վիճակները հստակ են
- Փորձարկված է իրատեսական տվյալների ծավալով և անմաքուր մուտքով
Որոնում Mythex-ով
Mythex-ով կառուցված հավելվածում տվյալները սովորաբար գտնվում են նախագծի սեփական Postgres տվյալների բազայում, ուստի կարող եք սկսել վերևի հրամաններով․ նախ նմուշի համապատասխանություն, ապա Postgres լրիվ տեքստային որոնում, երբ պետք է դասավորում։ Եթե ցանկանում եք հոստված որոնիչ, բերեք ձեր սեփական հաշիվը և բանալին, պահեք այն որպես նախագծի գաղտնիք և խնդրեք գործակալին ինդեքսավորել և հարցումներ անել սերվերից, ինչպես նկարագրված է Integrate any API-ում։
Որոնումը շատ հավելվածների սիրտն է։ Տես ինչպես կառուցել դիրեկտորիայի կայք, ինչպես կառուցել աշխատանքի հայտարարությունների կայք և ինչպես կառուցել շուկա, թե ինչպես է այն տեղավորվում մնացած արտադրանքի մեջ։
Հարցեր
Ո՞րն է հավելվածին որոնում ավելացնելու ամենահեշտ եղանակը։
Եթե ձեր տվյալները տվյալների բազայում են, սերվերային երթուղին, որ զտում է տողերը մի քանի սյունակում մեծատառ չզգայուն համապատասխանությամբ, ամենահեշտ սկիզբն է։ Փոքր ցուցակի համար, որ արդեն բեռնված է բրաուզերում, զտումը բրաուզերում նույնիսկ ավելի պարզ է։
Ինձ Algolia կամ Elasticsearch պե՞տք է որոնման համար։
Սկզբում սովորաբար ոչ։ Postgres-ի լրիվ տեքստային որոնումը լավ է գործում բառերի համապատասխանության, դասավորման և հազարից մինչև միլիոն տողերի համար։ Հոստված որոնիչը արժե, երբ պետք է ուժեղ սխալների հանդուրժողականություն, արդյունքներ՝ մուտքագրելուն զուգընթաց մեծ տվյալների վրա, կամ առաջադեմ համապատասխանության կարգավորում։
Ինչու իմ որոնումը չի գտնում արդյունքներ, երբ կան սխալներ։
Հիմնական համապատասխանությունը և ստանդարտ լրիվ տեքստային որոնումը փնտրում են բառերը այնպես, ինչպես գրված են (կամ դրանց արմատները), ուստի սխալ գրված բառը չի գտնվում։ Ձեզ պետք է մոտավոր համապատասխանություն, օրինակ՝ Postgres-ում trigram նմանություն, կամ սխալների հանդուրժողականություն ունեցող որոնիչ։
Որոնումը պետք է աշխատի բրաուզերում, թե սերվերում։
Սերվերում, եթե բան է ավելի մեծ, քան փոքր հանրային ցուցակ։ Սերվերային որոնումը մասշտաբվում է, հարգում է թույլտվությունները և չի ուղարկում ձեր ամբողջ տվյալների բազան յուրաքանչյուր այցելուին։