6 คะแนน โดย GN⁺ 2023-07-13 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • PostgreSQL มีองค์ประกอบที่จำเป็นสำหรับการสร้างเสิร์ชเอนจินในตัว
  • องค์ประกอบหลักได้แก่ชนิดข้อมูล tsvector และ tsquery, ตัวดำเนินการจับคู่ @@, ฟังก์ชันจัดอันดับผลลัพธ์ที่ตรงกัน และชนิดดัชนี GIN
  • tsvector ใช้เก็บคำศัพท์ที่ผ่านการทำให้เป็นมาตรฐานแล้ว พร้อมตำแหน่งในข้อความต้นฉบับ
  • tsquery แทนคิวรีที่ผ่านการทำให้เป็นมาตรฐานแล้ว และสามารถใช้ตัวดำเนินการตรรกะเพื่อรวมหลายคำค้นเข้าด้วยกัน
  • ชนิดดัชนี GIN ถูกใช้เพื่อให้คิวรี tsvector มีประสิทธิภาพ
  • ts_rank และ ts_rank_cd เป็นฟังก์ชันจัดอันดับที่พิจารณาทั้งความถี่ของคำและความใกล้กันของคำ
  • สามารถปรับแต่งความเกี่ยวข้องเพื่อปรับผลการค้นหาให้ตรงตามเกณฑ์เฉพาะได้
  • สามารถเพิ่มตัวเร่งคะแนนสำหรับตัวเลข วันที่ และค่าที่ต้องตรงเป๊ะลงในคะแนนการจัดอันดับได้
  • สามารถกำหนดน้ำหนักให้คอลัมน์เพื่อให้บางคำมีความสำคัญมากกว่าในผลการค้นหา
  • การใช้ setweight กับคอลัมน์ชื่อเรื่องจะช่วยเพิ่มอันดับให้ชื่อภาพยนตร์ที่มีคำว่า "jedi"
  • PostgreSQL ไม่ได้รองรับ fuzzy search หรือการยอมรับคำพิมพ์ผิดโดยตรง แต่สามารถทำได้ด้วย similarity หรือระยะห่าง Levenshtein
  • การค้นหาแบบ faceted search ซึ่งช่วยให้ผู้ใช้จำกัดขอบเขตการค้นหาได้ สามารถนำไปใช้ใน PostgreSQL ได้ด้วยการกำหนดหมวดหมู่หรือใช้อัลกอริทึม
  • บทความปิดท้ายด้วยการระบุว่าจะมีการเปรียบเทียบกับ Elasticsearch แบบละเอียดในภาค 2

1 ความคิดเห็น

 
GN⁺ 2023-07-13
ความคิดเห็นจาก Hacker News
  • ตั้งตารอภาค 2 ที่จะเปรียบเทียบ PostgreSQL กับ Elasticsearch
  • ผมประเมินความพยายามในการซิงก์ PostgreSQL กับ Elasticsearch สำหรับ CRUD และการค้นหาต่ำเกินไป
  • เสิร์ชเอนจินต้องการความเร็วในการค้นหาที่สูง เรื่องนี้ไม่ได้สำคัญแค่ในทางทฤษฎีเท่านั้น
  • ด้วยอัลกอริทึม CS พื้นฐานและการใช้ฮาร์ดแวร์อย่างเหมาะสม ก็สามารถสร้างฐานข้อมูลพื้นฐานและเสิร์ชเอนจินได้ไม่ยาก
  • ความเป็นอัตวิสัยของการค้นหาคือความท้าทายที่ใหญ่ที่สุด
  • Postgres สามารถจับคู่กับ pgvector เพื่อค้นหาเนื้อหาที่เกี่ยวข้องผ่าน embeddings ได้
  • การค้นหาภายใน Postgres ใช้ CPU สูง และควรให้ความสำคัญกับการอัปเดตทรานแซ็กชันก่อน
  • คลัสเตอร์ ES และ Solr ทำงานด้วยการใช้ CPU สูงระหว่างการรีอินเด็กซ์
  • ส่วนขยายของ PG สำหรับการค้นหา, recursive join และเวกเตอร์นั้นสนุกและเรียบง่ายสำหรับโปรเจ็กต์ข้างเคียง
  • SQLite ก็มีฟีเจอร์ทำดัชนีขั้นสูงและการทำ stemming เช่นกัน
  • มีการทำ abstraction ของ business logic ไว้ในฐานข้อมูล แต่ไม่ได้กล่าวถึง trade-off
  • กำลังพิจารณาว่าจะรันเสิร์ชเอนจินแบบกำหนดเองสำหรับเว็บไซต์ที่บุ๊กมาร์กไว้บางแห่ง
  • อยากรู้ว่าควรเลือก Postgres/Elasticsearch หรือโซลูชันเชิงพาณิชย์
  • คำว่า "ขั้นสูง" ถือเป็นตัวบ่งชี้เชิงบวก