ทำการค้นหาข้อความแบบเต็มด้วย 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
  • estonian
  • finnish
  • french
  • german
  • greek
  • hindi
  • hungarian
  • indonesian
  • irish
  • italian
  • lithuanian
  • nepali
  • norwegian
  • portuguese
  • romanian
  • russian
  • serbian
  • spanish
  • swedish
  • tamil
  • turkish
  • yiddish

เรารองรับทุกภาษาที่การค้นหาข้อความแบบเต็มของ PostgreSQL รองรับ คุณสามารถดูรายการทั้งหมดได้โดยใช้ 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
มีประสิทธิภาพในการค้นหาเอกสารขนาดใหญ่ มีประสิทธิภาพในการค้นหาเอกสารขนาดใหญ่ มีประสิทธิภาพน้อยกว่าเมื่อค้นหาเอกสารขนาดใหญ่
เพิ่มค่าใช้จ่ายหน่วยความจำและพื้นที่เก็บข้อมูลเพื่อจัดเก็บคอลัมน์ที่สร้างขึ้นและ ดัชนีสำหรับการค้นหาแต่ละครั้ง