คู่มือ

วิธีเพิ่มการค้นหาในแอปของคุณ: ตั้งแต่ตัวกรองง่ายๆ ไปจนถึงการค้นหาข้อความเต็ม

ในการเพิ่มการค้นหาให้แอปของคุณ ให้เริ่มจากสิ่งที่ง่ายที่สุดและใช้งานได้: กล่องค้นหาที่เรียกเส้นทางบนเซิร์ฟเวอร์ ซึ่งกรองแถวในฐานข้อมูลโดยเทียบคำค้นกับไม่กี่คอลัมน์ พร้อมตัวกรองสิ่งต่างๆ เช่น หมวดหมู่หรือราคา เมื่อสิ่งนั้นยังไม่เพียงพอ เช่น คุณต้องการการจัดอันดับตามความเกี่ยวข้อง การตัดรากคำ หรือมีระเบียนจำนวนมาก ให้เปลี่ยนไปใช้การค้นหาข้อความเต็มของฐานข้อมูล และย้ายไปใช้บริการค้นหาแบบโฮสต์ก็ต่อเมื่อคุณต้องการการทนต่อคำพิมพ์ผิดอย่างดีหรือผลลัพธ์ทันทีบนข้อมูลขนาดใหญ่ ไม่ว่าจะเลือกแบบไหน การค้นหาต้องเคารพสิทธิ์: ผู้ใช้ไม่ควรพบระเบียนที่ตนไม่มีสิทธิ์เห็น

"การค้นหา" หมายถึงอะไรสำหรับแอปของคุณ

การค้นหาครอบคลุมหลายอย่าง และแอปส่วนใหญ่ต้องการมากกว่าหนึ่งอย่าง:

  • การค้นหาด้วยคำสำคัญ: กล่องข้อความ เช่น "หารายการที่มีคำว่า 'garden'"
  • ตัวกรอง: ตัวเลือกที่มีโครงสร้าง เช่น หมวดหมู่ เมือง ช่วงราคา วันที่ สถานะ
  • การเรียงลำดับ: ใหม่สุด ถูกสุด เกี่ยวข้องสุด
  • การเติมคำอัตโนมัติ: คำแนะนำขณะพิมพ์
  • การทนต่อคำพิมพ์ผิด: "restuarant" ยังหา "restaurant" ได้

สำหรับไดเรกทอรี กระดานงาน หรือร้านค้า ตัวกรองมักสำคัญกว่ากล่องข้อความ ตัดสินใจว่าคุณต้องการอะไรจริงๆ ก่อนเลือกเครื่องมือ

ตัวเลือกของคุณ

แนวทางวิธีทำงานเหมาะกับข้อจำกัด
กรองในเบราว์เซอร์โหลดรายการ แล้วกรองด้วย JavaScriptรายการสาธารณะขนาดเล็ก (ไม่กี่ร้อยรายการ)ส่งข้อมูลทั้งหมดให้ผู้เข้าชมทุกคน และช้าเมื่อรายการใหญ่
การจับคู่รูปแบบในฐานข้อมูลคิวรีฝั่งเซิร์ฟเวอร์ เช่น "ชื่อมีข้อความ" ไม่สนตัวพิมพ์แอปขนาดเล็กถึงกลาง เครื่องมือผู้ดูแลไม่มีการจัดอันดับ อาจช้าบนตารางใหญ่ ไม่มีการตัดรากคำ
การค้นหาข้อความเต็มในฐานข้อมูลPostgres จัดทำดัชนีคำและจัดอันดับผลที่ตรงกันแอปที่มีเนื้อหาจำนวนมากส่วนใหญ่อ่อนต่อคำพิมพ์ผิด เว้นแต่คุณเพิ่มการจับคู่แบบคลุมเครือ
การจับคู่แบบคลุมเครือ (trigram)Postgres เปรียบเทียบลำดับตัวอักษรเพื่อหาความคล้ายชื่อ ฟิลด์สั้นๆ การทนต่อคำพิมพ์ผิดต้องใช้ extension และดัชนี และต้องปรับแต่ง
บริการค้นหาแบบโฮสต์บริการแยกทำดัชนีข้อมูลของคุณ (Algolia, Meilisearch, Typesense, Elasticsearch และอื่นๆ)แคตตาล็อกขนาดใหญ่ การค้นหาทันที การทนต่อคำพิมพ์ผิดสูงต้องดูแลการซิงก์อีกบริการ จ่ายเงิน และรักษาความปลอดภัยเพิ่ม

หากข้อมูลของคุณอยู่ใน Postgres อยู่แล้ว การค้นหาข้อความเต็ม ในตัวของมันคือทางเลือกกลางที่ดี มันแบ่งข้อความเป็นคำ ลดคำเป็นรากคำ (ทำให้ "running" ตรงกับ "run") ข้ามคำทั่วไป และจัดอันดับผลตามความตรงกัน ด้วยดัชนีที่เหมาะสม มันจะยังคงเร็วบนตารางขนาดใหญ่

พรอมต์ตัวอย่าง

จุดเริ่มต้นที่ง่าย:

เพิ่มกล่องค้นหาและตัวกรองในหน้ารายการ การค้นหาควรเทียบคำค้นกับ title และ description โดยไม่สนตัวพิมพ์ใหญ่-เล็ก ตัวกรอง: หมวดหมู่ (รายการเลือก) เมือง (รายการเลือก) และราคาสูงสุด ทำการค้นหาบนเซิร์ฟเวอร์ด้วยเส้นทาง API แบบแบ่งหน้า 20 ผลต่อหน้า เก็บการค้นหาและตัวกรองไว้ใน URL เพื่อให้แชร์ผลลัพธ์ได้และปุ่มย้อนกลับทำงาน แสดงสถานะว่างที่เป็นมิตรเมื่อไม่มีอะไรตรง

การอัปเกรดเป็นการค้นหาข้อความเต็ม:

เปลี่ยนการค้นหารายการเป็นการค้นหาข้อความเต็มของ Postgres บน title (ให้น้ำหนักสูงกว่า) และ description เพิ่มดัชนีที่เหมาะสม จัดอันดับผลตามความเกี่ยวข้อง และคงตัวกรองและการแบ่งหน้าที่มีอยู่ไว้ อย่าเปลี่ยนข้อมูลที่มีอยู่

การเพิ่มการทนต่อคำพิมพ์ผิดสำหรับชื่อ:

เพิ่มการจับคู่แบบคลุมเครือบนชื่อธุรกิจ เพื่อให้คำพิมพ์ผิดเล็กน้อยยังหาผลลัพธ์ได้ ใช้ trigram similarity ถ้ามี พร้อมดัชนี และถอยกลับไปใช้การค้นหาปัจจุบันถ้าไม่มี

ทำทีละขั้น

  1. ลิสต์สิ่งที่ผู้คนค้นหา ฟิลด์ใดบ้าง (title, description, tags, name) ตัวกรองใดบ้าง ถามผู้ใช้จริงสักไม่กี่คนถ้าทำได้
  2. เริ่มจากฝั่งเซิร์ฟเวอร์ เพิ่ม API route ที่รับคำค้นและตัวกรอง และคืนผลหนึ่งหน้า อย่าโหลดทุกอย่างเข้าเบราว์เซอร์
  3. ใช้สิทธิ์ในคิวรี หากผู้ใช้เห็นเฉพาะระเบียนของตนเอง หรือเฉพาะที่เผยแพร่แล้ว เงื่อนไขนั้นต้องอยู่ในคิวรีเดียวกับการค้นหา
  4. เพิ่มการแบ่งหน้าตั้งแต่วันแรก ไม่ว่าจะเป็นหมายเลขหน้าหรือ "โหลดเพิ่ม"
  5. เก็บสถานะการค้นหาไว้ใน URL (เช่น ?q=garden&city=leeds) ลิงก์ที่แชร์ได้ ปุ่มย้อนกลับที่ทำงาน และเครื่องมือค้นหาสามารถรวบรวมข้อมูลหน้าที่กรองแล้วได้หากคุณต้องการ
  6. หน่วงเวลาการค้นหาขณะพิมพ์ รอไม่กี่ร้อยมิลลิวินาทีหลังหยุดพิมพ์ก่อนส่งคิวรี เพื่อไม่ให้ส่งคำขอทุกการกดแป้น
  7. เพิ่มดัชนี เมื่อคุณรู้แล้วว่าคุณกรองและค้นหาจากคอลัมน์ใด
  8. อัปเกรด ไปเป็นการค้นหาข้อความเต็ม จากนั้นการจับคู่แบบคลุมเครือ แล้วจึงบริการแบบโฮสต์ เฉพาะเมื่อขั้นตอนที่ง่ายกว่าไม่ตอบโจทย์ผู้ใช้จริง
  9. ทดสอบ ด้วยข้อมูลที่ดูสมจริง: หลายร้อยหรือหลายพันแถว อักขระแปลกๆ คำค้นว่าง คำค้นที่ยาวมาก และภาษาอื่นหากคุณรองรับ

ข้อผิดพลาดที่พบบ่อย

  • โหลดตารางทั้งหมดเข้าเบราว์เซอร์ ใช้ได้สำหรับ 50 รายการ แต่ทรมานสำหรับ 50,000 และเปิดเผยทุกระเบียน รวมถึงระเบียนที่ผู้ใช้ไม่ควรเห็น
  • การค้นหาที่เพิกเฉยต่อสิทธิ์ การค้นหาเป็นช่องรั่วที่พบบ่อย: ระเบียนส่วนตัวหรือฉบับร่างโผล่ขึ้นมาเพราะคิวรีค้นหาลืมเงื่อนไข "เฉพาะของฉัน" หรือ "เฉพาะที่เผยแพร่แล้ว"
  • สร้าง SQL จากข้อมูลดิบของผู้ใช้ ใช้คิวรีแบบมีพารามิเตอร์เสมอ เครื่องมือสร้างแอปด้วย AI มักทำให้อยู่แล้ว แต่ให้ตรวจหากเห็นการต่อสตริง
  • ไม่มีสถานะว่าง "ไม่พบผลลัพธ์" พร้อมคำแนะนำ (ล้างตัวกรอง ตรวจการสะกด) ช่วยไม่ให้คนออกจากหน้า
  • ไม่มีดัชนี การค้นหาดูดีกับข้อมูลทดสอบ แต่ช้าลงเมื่อข้อมูลจริงเติบโต
  • กระโดดไปใช้บริการค้นหาทันที คุณต้องดูแลสำเนาข้อมูลที่สองให้ซิงก์ จัดการการลบ และรักษาความปลอดภัยชุดคีย์อีกชุด มักโดยไม่ได้ประโยชน์ที่มองเห็นได้
  • ลืมมือถือ ตัวกรองต้องพอดีกับหน้าจอโทรศัพท์ ลิ้นชักตัวกรองหรือแผงที่พับได้มักใช้งานได้ดีกว่าแถบข้าง

เช็กลิสต์

  • คุณรู้ว่าฟิลด์ใดถูกค้นหาและมีตัวกรองอะไรบ้าง
  • การค้นหาทำงานบนเซิร์ฟเวอร์และคืนผลแบบแบ่งหน้า
  • คิวรีบังคับใช้สิทธิ์เดียวกับส่วนอื่นของแอป
  • ข้อมูลที่ผู้ใช้ป้อนส่งเป็นพารามิเตอร์ ไม่ต่อเข้ากับ SQL
  • สถานะการค้นหาอยู่ใน URL
  • การพิมพ์ถูกหน่วงเวลา
  • คอลัมน์ที่ค้นหาและกรองมีดัชนี
  • สถานะว่าง ไม่พบผลลัพธ์ และข้อผิดพลาดชัดเจน
  • ทดสอบด้วยปริมาณข้อมูลที่สมจริงและข้อมูลที่ไม่เรียบร้อย

การเพิ่มการค้นหาด้วย Mythex

ในแอปที่สร้างบน Mythex ข้อมูลมักอยู่ใน ฐานข้อมูล Postgres ของโปรเจกต์เอง ดังนั้นคุณเริ่มได้ด้วยพรอมต์ด้านบน คือการจับคู่รูปแบบก่อน แล้วค่อยใช้การค้นหาข้อความเต็มของ Postgres เมื่อต้องการการจัดอันดับ หากต้องการบริการค้นหาแบบโฮสต์ ให้นำบัญชีและคีย์ของคุณเอง เก็บเป็นความลับของโปรเจกต์ แล้วขอให้เอเจนต์จัดทำดัชนีและคิวรีจากฝั่งเซิร์ฟเวอร์ ตามที่อธิบายใน Integrate any API

การค้นหาคือแกนกลางของหลายแอป ดู วิธีสร้างเว็บไซต์ไดเรกทอรี วิธีสร้างกระดานงาน และ วิธีสร้างมาร์เก็ตเพลส เพื่อดูว่าการค้นหาเข้ากับส่วนอื่นของผลิตภัณฑ์อย่างไร

คำถาม

วิธีที่ง่ายที่สุดในการเพิ่มการค้นหาในแอปคืออะไร?

หากข้อมูลของคุณอยู่ในฐานข้อมูล เส้นทางบนเซิร์ฟเวอร์ที่กรองแถวด้วยการจับคู่ที่ไม่สนตัวพิมพ์ใหญ่-เล็กในไม่กี่คอลัมน์ คือจุดเริ่มต้นที่ง่ายที่สุด สำหรับรายการเล็กๆ ที่โหลดอยู่ในเบราว์เซอร์แล้ว การกรองในเบราว์เซอร์ง่ายกว่าอีก

ต้องใช้ Algolia หรือ Elasticsearch สำหรับการค้นหาหรือไม่?

โดยทั่วไปยังไม่ต้องในตอนแรก การค้นหาข้อความเต็มของ Postgres จัดการการจับคู่คำ การจัดอันดับ และหลักพันถึงหลักล้านแถวได้ดี บริการค้นหาแบบโฮสต์คุ้มค่าเมื่อคุณต้องการการทนต่อคำที่พิมพ์ผิดได้ดี ผลลัพธ์ทันทีขณะพิมพ์บนข้อมูลขนาดใหญ่ หรือการปรับความเกี่ยวข้องขั้นสูง

ทำไมการค้นหาของฉันไม่พบผลลัพธ์เมื่อพิมพ์ผิด?

การจับคู่พื้นฐานและการค้นหาข้อความเต็มมาตรฐานมองหาคำตามที่พิมพ์ (หรือรากของคำ) ดังนั้นการสะกดผิดจึงหาไม่เจอ คุณต้องใช้การจับคู่แบบคลุมเครือ (fuzzy) เช่น trigram similarity ใน Postgres หรือบริการค้นหาที่ทนต่อคำพิมพ์ผิด

การค้นหาควรทำงานในเบราว์เซอร์หรือบนเซิร์ฟเวอร์?

บนเซิร์ฟเวอร์สำหรับทุกอย่างที่เกินกว่ารายการสาธารณะขนาดเล็ก การค้นหาฝั่งเซิร์ฟเวอร์ขยายขนาดได้ เคารพสิทธิ์ และไม่ส่งชุดข้อมูลทั้งหมดของคุณไปยังผู้เข้าชมทุกคน

Mythex · Pricing · สร้างอะไรก็ได้ด้วย AI · เทมเพลตเว็บไซต์และแอป · เปรียบเทียบ Mythex · อภิธานศัพท์การสร้างแอปด้วย AI · เครื่องมือฟรีสำหรับสร้างแอปด้วย AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)