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

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

คุณเพิ่มการค้นหาแบบเต็มข้อความลงในบริการได้ ก่อนอื่นให้เพิ่ม@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
}

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

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

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

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

อาร์กิวเมนต์ที่แชร์

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

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

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

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

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

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

ภาษา
  • เรียบง่าย
  • arabic
  • อาร์เมเนีย
  • บาสก์
  • คาตาลัน
  • danish
  • ดัตช์
  • english
  • ฟินแลนด์
  • french
  • german
  • greek
  • ภาษาฮินดี
  • ฮังการี
  • indonesian
  • ไอริช
  • อิตาลี
  • ลิทัวเนีย
  • เนปาล
  • นอร์เวย์

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

SELECT cfgname FROM pg_ts_config;

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

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

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

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

  • QUERY ให้ความหมายที่คุ้นเคยแก่เครื่องมือค้นหาเว็บ (เช่น สตริงที่ยกมา คำว่า AND และ OR) ซึ่งเป็นค่าเริ่มต้น
  • PLAIN จะจับคู่คำทั้งหมด แต่ไม่จำเป็นต้องอยู่ด้วยกัน ("หมาสีน้ำตาล" จะจับคู่กับ "หมาสีน้ำตาลและขาว" หรือ "หมาสีขาวและน้ำตาล" )
  • วลีตรงกับวลีที่แน่นอน ( "หมาสีน้ำตาล" จะตรงกับ "หมาสีขาวและน้ำตาล" แต่จะไม่ตรงกับ "หมาสีน้ำตาลและขาว")
  • ขั้นสูงช่วยให้คุณสร้างการค้นหาที่ซับซ้อนได้โดยใช้ ชุดโอเปอเรเตอร์ 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
    ...
  }
}

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

Data Connect มีวิธีค้นหาในฐานข้อมูลหลายวิธี

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

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