Pendahuluan
Satu kueri di seluruh proyek Anda - produk, halaman, blok, formulir, pesanan, dan lainnya, dikelompokkan berdasarkan jenis entitas.
π― Apa yang dilakukan modul ini?β
Modul Search membungkus endpoint pencarian lintas-entitas publik. Anda mengirimkan kueri teks dan mendapatkan kembali setiap catatan yang nama atau nilai atributnya cocok, dari 18 jenis entitas sekaligus, dikelompokkan per jenis dan dianotasi dengan bagaimana setiap catatan cocok.
Gunakan ini untuk menggerakkan kotak "cari semuanya" global - jenis yang menunjukkan beberapa produk, beberapa halaman, dan formulir yang cocok dalam satu dropdown - dan kemudian menyelami satu jenis ketika pengguna meminta lebih banyak.
Ini adalah pencarian kata kunci: ini mencocokkan pada teks literal dari judul, pengidentifikasi, URL, dan nilai atribut. Untuk pencarian berbasis makna (kueri seperti "jaket hangat untuk musim dingin" yang cocok dengan produk bernama "parka berisolasi"), gunakan pencarian semantik dari modul individu - lihat Pencarian vektor vs pencarian global di bawah.
π Panduan Cepatβ
Inisialisasi modul dari defineOneEntry:
const { Search } = defineOneEntry( "your-project-url", { "token": "your-app-token" });
Cari semuanya, lalu telusuri grup:
// Search every entity type for "winter".
const result = await Search.globalSearch('winter');
console.log(result.query); // "winter"
result.groups.forEach((group) => {
console.log(group.type, group.items.length, group.hasMore);
group.items.forEach((item) => {
console.log(item.id, item.title, item.matchKind, item.fragment);
});
});
β¨ Konsep Kunciβ
Grupβ
Responsnya bukan daftar datar. Ini adalah { query, groups }, di mana setiap grup menyimpan catatan dari satu jenis entitas:
{
query: "winter",
groups: [
{ type: "products", items: [ /* β¦ */ ], hasMore: false },
{ type: "pages", items: [ /* β¦ */ ], hasMore: false }
]
}
hasMore memberi tahu Anda apakah ada lebih banyak catatan dari jenis itu yang ada di luar halaman yang dikembalikan - petunjuk untuk menawarkan tautan "tampilkan semua produk" yang menjalankan ulang kueri dalam mode drilldown.
Konteks kecocokanβ
Setiap item membawa konteks tentang bagaimana ia cocok, sehingga Anda dapat merender baris hasil yang bermakna alih-alih hanya judul kosong:
| Field | Apa yang diberitahukan kepada Anda |
|---|---|
matchKind | Jenis peringkat kecocokan: exact, title, attributeName, atau attributeValue |
matchedField | Bidang konkret yang cocok: id, title, identifier, url, attributeName, attributeValue, importId, nodeName |
matchedAttribute | Atribut tempat kecocokan terjadi (ketika kecocokan berasal dari atribut) |
fragment | Konteks teks biasa di sekitar kecocokan, tanpa markup - sorot sendiri |
langCode | Bahasa dari nilai yang cocok, sehingga Anda dapat memberi label pada hasil lintas-bahasa |
parent | Catatan pemilik untuk entitas yang tidak memiliki halaman sendiri (sebuah slide β bloknya, sebuah pesanan β penyimpanannya) |
Jenis entitasβ
types mempersempit pencarian. Kirimkan salah satu dari ini, dan SDK mengirimkannya terpisah dengan koma:
products, pages, blocks, slides, templates, discounts, user_groups, users, admins, menus, forms, attributes_sets, attributes, orders, workflows, events, subscriptions, collections.
Hapus types untuk mencari semuanya.
Mode drilldownβ
offset dan limit mengalihkan endpoint ke mode drilldown - paging melalui satu jenis entitas alih-alih menampilkan semua dari mereka.
β οΈ Mereka diterima hanya bersama dengan tepat satu jenis yang dapat diakses dalam
types. Kombinasi lain akan menjawab 400 - Mode drilldown (limit/offset) memerlukan tepat satu jenis yang dapat diakses dalamtypes.
SDK tidak mengatur default: hapus keduanya dan setiap grup kembali dalam keadaan penuh.
// Overview: every type, every group complete.
const overview = await Search.globalSearch('winter');
// Drilldown: page 1 of the products only.
const products = await Search.globalSearch('winter', ['products'], 'visible', 0, 20);
Visibilitasβ
visibility menyaring catatan yang dicari: 'all' (default), 'visible', atau 'hidden'.
π Apa yang Perlu Anda Ketahuiβ
idadalah angka untuk sebagian besar jenis, string untuk workflows dan atribut -number | string, jadi jangan menganggap id numerik saat membangun kunci atau URL.titlebersifat opsional: catatan tanpa nama sendiri (pesanan, pengguna tanpa login) kembali tanpa itu. Kembali keidentifieratausubtitle.subtitlemembawa baris sekunder yang kebetulan dimiliki jenis tersebut - URL halaman, penyimpanan pesanan, nama node.attributeSetIdhanya ada untuktype: "attributes", menunjuk pada set yang dimiliki atribut tersebut.- Hanya catatan yang dapat dilihat oleh pemanggil saat ini yang dikembalikan; pencarian menghormati aturan akses yang sama seperti sisa API.
π Tabel Referensi Cepatβ
| Metode | Deskripsi |
|---|---|
| globalSearch() | Mencari nama dan nilai atribut di semua jenis entitas |
Pencarian vektor vs pencarian globalβ
Keduanya menemukan catatan dari kueri teks, tetapi mereka menjawab pertanyaan yang berbeda:
| globalSearch | getβ¦ByVectorSearch | |
|---|---|---|
| Mencocokkan pada | Teks literal dari judul, pengidentifikasi, URL, dan nilai atribut | Makna - kesamaan semantik (vektor) |
| Lingkup | 18 jenis entitas dalam satu panggilan | Satu modul per panggilan |
| Mengembalikan | { query, groups[] } - dikelompokkan berdasarkan jenis | { items, total } - wadah datar |
| Penggunaan khas | Kotak pencarian global / palet perintah | "Temukan sesuatu yang mirip dengan ini" di satu entitas |
Rekan-rekan semantik hidup di modul itu sendiri: products, pages, users, orders, discounts, admins dan form data.
β Pertanyaan Umum (FAQ)β
Mengapa offset / limit saya dijawab dengan 400?β
Karena mereka hanya berfungsi dalam mode drilldown. Kirimkan tepat satu jenis entitas yang dapat diakses dalam types bersamaan dengan mereka, atau hapus sepenuhnya.
Bagaimana cara saya menyoroti kecocokan di UI?β
Gunakan fragment - itu adalah konteks teks biasa di sekitar kecocokan, sengaja bebas dari markup, sehingga Anda dapat menyoroti kueri di dalamnya sendiri tanpa mensterilkan apa pun.
Sebuah item tidak memiliki title. Apakah itu bug?β
Tidak. Pesanan dan pengguna tanpa login tidak memiliki nama sendiri, jadi title tidak ada. Render identifier, subtitle, atau label spesifik jenis sebagai gantinya.
Bisakah saya mencari catatan yang tersembunyi?β
Kirimkan visibility: 'hidden' (atau 'all') - tergantung pada aturan akses yang berlaku untuk pemanggil.
π Praktik Terbaikβ
- Debounce kueri dalam kotak pencarian saat Anda mengetik: setiap ketukan adalah permintaan.
- Tampilkan panggilan ringkasan terlebih dahulu (tanpa
offset/limit), lalu beralih ke drilldown ketika pengguna memilih jenis - itulah tepatnya fungsihasMore. - Persempit
typeske apa yang benar-benar dapat dirender UI Anda; mencari 18 jenis untuk menampilkan 2 adalah pekerjaan yang terbuang. - Perlakukan
idsebagainumber | stringsaat membangun tautan dan kunci React.
π Dokumentasi Terkaitβ
- Modul Produk - Pencarian produk semantik dan katalog produk
- Modul Halaman - Halaman yang dikembalikan dalam grup
pages - Modul Filter - Pohon filter yang dikurasi untuk navigasi terfasilitasi