ทำการค้นหาข้อความแบบเต็มด้วย SQL Connect

Firebase SQL Connect รองรับการค้นหาข้อความแบบเต็มซึ่งขับเคลื่อนโดย PostgreSQL การค้นหาข้อความแบบเต็มช่วยให้คุณค้นหาข้อมูลภายในชุดข้อมูลขนาดใหญ่ได้อย่างรวดเร็วและมีประสิทธิภาพด้วยการค้นหาคีย์เวิร์ดและวลีในหลายคอลัมน์พร้อมกัน

คุณสามารถเพิ่มการค้นหาข้อความแบบเต็มลงในบริการได้ โดยขั้นแรกให้เพิ่ม Directive @searchable ลงใน String ในสคีมาที่ต้องการค้นหา ตัวอย่างเช่น

type Movie
  @table {

  # The fields you want to search over
  title: String! @searchable
  genre: String @searchable
  description: String @searchable
  tags: [String]

  # Some other fields that we won't search over
  rating: Float
  imageUrl: String!
  releaseYear: Int
}

เมื่อเพิ่ม Directive นี้แล้ว คุณจะทำการค้นหาข้อความแบบเต็มได้โดยเพิ่ม ช่อง <pluralType>_search ลงในการค้นหา ในกรณีนี้ ช่องดังกล่าวจะเป็น movies_search

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query) {
    id
    title
    imageUrl
    releaseYear
    genre
    rating
    tags
    description
  }
}

การปรับแต่งผลการค้นหาข้อความแบบเต็ม

คุณสามารถปรับแต่งผลการค้นหาข้อความแบบเต็มได้โดยเพิ่มอาร์กิวเมนต์ลงใน Directive @searchable และช่อง _search

อาร์กิวเมนต์ที่ใช้ร่วมกัน

คุณสามารถควบคุมผลการค้นหาด้วยอาร์กิวเมนต์จำนวนมากที่ใช้สำหรับพื้นฐาน ช่องรายการ <pluralType> ได้ดังนี้

  • order ช่วยให้คุณเปลี่ยนลำดับของผลการค้นหาได้ หากไม่ระบุ ระบบจะจัดเรียงผลการค้นหาตามความเกี่ยวข้องจากมากไปน้อย
  • where ช่วยให้คุณเพิ่มตัวกรองเพิ่มเติมลงในการค้นหาได้ (เช่น ค้นหาเฉพาะภาพยนตร์ แนวหนึ่งๆ)
  • limit ทำให้การค้นหาแสดงผลการค้นหา X รายการแรกเท่านั้น
  • offset ทำให้การค้นหาข้ามผลการค้นหา X รายการแรก
  • distinct เพิ่มโอเปอเรเตอร์ DISTINCT ลงใน SQL ที่สร้างขึ้น

การเลือกภาษา

โดยค่าเริ่มต้น การค้นหาข้อความแบบเต็มจะแยกวิเคราะห์เอกสารเป็นภาษาอังกฤษ คุณสามารถเปลี่ยนภาษาได้ด้วยอาร์กิวเมนต์ `language` ใน Directive @searchable ดังนี้

type Movie
  @table {
  title: String! @searchable(language: "french")
  ...
}

การระบุภาษาที่ถูกต้องจะช่วยให้ PostgreSQL ทำการตัดคำตามหลักเกณฑ์ทางไวยากรณ์ได้อย่างถูกต้องและช่วยให้มั่นใจว่าการค้นหาจะไม่พลาดผลการค้นหาที่เกี่ยวข้อง หากคุณค้นหาในหลายคอลัมน์ คอลัมน์ทั้งหมดจะต้องตั้งค่าเป็นภาษาเดียวกัน

ภาษา
  • simple
  • arabic
  • armenian
  • basque
  • catalan
  • danish
  • dutch
  • english
  • finnish
  • french
  • german
  • greek
  • hindi
  • hungarian
  • indonesian
  • irish
  • italian
  • lithuanian
  • nepali
  • norwegian

คุณสามารถดูรายการทั้งหมดได้โดยใช้ psql ด้วยการค้นหาต่อไปนี้

SELECT cfgname FROM pg_ts_config;

รูปแบบการค้นหา

โดยค่าเริ่มต้น การค้นหาข้อความแบบเต็มจะใช้ความหมายของเว็บสำหรับการค้นหา (คล้ายกับการค้นหาของ Google) คุณสามารถเปลี่ยนลักษณะการทำงานนี้ได้ด้วยอาร์กิวเมนต์ queryFormat ในช่อง <pluralType>_search

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query, queryFormat: PHRASE) {
    ...
  }
}

รูปแบบการค้นหามี 4 ตัวเลือก ได้แก่

  • QUERY ให้ความหมายที่คุ้นเคยแก่เครื่องมือค้นหาเว็บ (เช่น สตริงที่อยู่ในเครื่องหมายคำพูด, AND และ OR) ซึ่งเป็นค่าเริ่มต้น
  • PLAIN จะจับคู่คำทั้งหมด แต่ไม่จำเป็นต้องอยู่ด้วยกัน ("brown dog" จะจับคู่ "the brown and white dog" หรือ "the white and brown dog")
  • PHRASE จะจับคู่วลีที่ตรงกันทุกประการ ("brown dog" จะจับคู่ "the white and brown dog" แต่จะไม่จับคู่ "brown and white dog")
  • ขั้นสูง ช่วยให้คุณสร้างการค้นหาที่ซับซ้อนได้โดยใช้ โอเปอเรเตอร์ tsquery แบบเต็มชุด

เกณฑ์ความเกี่ยวข้อง

การตั้งค่าเกณฑ์ความเกี่ยวข้องหมายความว่าการค้นหาจะแสดงเฉพาะผลการค้นหาที่มีค่าความเกี่ยวข้องสูงกว่าค่าหนึ่งๆ ในหลายกรณี คุณไม่จำเป็นต้องตั้งค่านี้ เนื่องจากผลการค้นหาที่มีความเกี่ยวข้องมากกว่า 0 จะเป็นผลการค้นหาที่เกี่ยวข้อง

อย่างไรก็ตาม หากพบว่าการค้นหาแสดงผลการค้นหาที่ไม่เกี่ยวข้อง เกณฑ์ความเกี่ยวข้องจะช่วยกรองผลการค้นหาเหล่านั้นออกให้คุณ

หากต้องการทราบค่าที่เหมาะสมสำหรับเกณฑ์ความเกี่ยวข้อง คุณควรทำการค้นหาทดสอบ 2-3 ครั้งและดู _metadata.relevance

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query) {
    id
    title
    _metadata {
      relevance
    }
    ...
  }
}

เลือกเกณฑ์ที่จะละเว้นผลการค้นหาที่คุณคิดว่าไม่เกี่ยวข้อง โดยทำดังนี้

query SearchMovies($query: String) @auth(level: PUBLIC) {
  movies_search(query: $query, relevanceThreshold: 0.05) {
    id
    title
    ...
  }
}

การเลือกระหว่างการค้นหาข้อความแบบเต็ม การค้นหาความคล้ายคลึงกันของเวกเตอร์ และตัวกรองรูปแบบสตริง

SQL Connect มีวิธีต่างๆ ในการค้นหาฐานข้อมูล

ใช้ตารางนี้เพื่อช่วยคุณเลือกวิธีที่เหมาะสมกับกรณีการใช้งาน

การค้นหาข้อความแบบเต็ม การค้นหาความคล้ายคลึงกันของเวกเตอร์ ตัวกรองรูปแบบสตริง
เหมาะสำหรับการใช้ฟังก์ชันการค้นหาทั่วไป เหมาะสำหรับการค้นหาแถวที่คล้ายกันในเชิงความหมาย (เช่น รายการแนะนำหรือ 'เพิ่มเติมที่คล้ายกัน') เหมาะสำหรับการค้นหาข้อความที่ตรงกันทุกประการหรือการค้นหานิพจน์ทั่วไป
ทำการตัดคำตามหลักเกณฑ์ทางไวยากรณ์ ซึ่งช่วยจับคู่คำเดียวกันในรูปแบบหรือกาลต่างๆ ของคำเดียวกัน ต้องใช้ Vertex AI ใช้หน่วยความจำและพื้นที่ดิสก์น้อยที่สุด เนื่องจากไม่จำเป็นต้องใช้ ดัชนีหรือคอลัมน์ที่สร้างขึ้น
สามารถทำได้ในหลายคอลัมน์ในตาราง ใช้ได้กับคอลัมน์เดียวในแต่ละครั้ง สามารถทำได้ในหลายคอลัมน์ในตารางโดยใช้ตัวกรอง OR
มีประสิทธิภาพในการค้นหาเอกสารขนาดใหญ่ มีประสิทธิภาพในการค้นหาเอกสารขนาดใหญ่ ประสิทธิภาพลดลงเมื่อค้นหาเอกสารขนาดใหญ่
เพิ่มค่าใช้จ่ายหน่วยความจำและพื้นที่เก็บข้อมูลเพื่อจัดเก็บคอลัมน์ที่สร้างขึ้นและ ดัชนีสำหรับการค้นหาแต่ละครั้ง