การนำ Full Text Search ใน SQL Server มาใช้: คู่มือที่ครอบคลุม

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

ปัญหา

นักพัฒนาประสบปัญหาเมื่อการค้นหาชื่อโดยใช้ Full Text Search ของ SQL Server menghasilkan ผลลัพธ์ที่ไม่สอดคล้องกัน สถานการณ์นี้เกี่ยวข้องกับตารางที่มีคอลัมน์สามคอลัมน์สำหรับชื่อ: ชื่อแรก, ชื่อกลาง, และ นามสกุล ผู้ใช้สามารถป้อนชื่อเต็มหรือบางส่วนของชื่อ แต่ไม่_queries บางรายการจะให้ผลลัพธ์ ตัวอย่างเช่น:

  • การค้นหา Fry คืนค่าผลลัพธ์ที่คาดหวังสำหรับ “Phillip Fry.”
  • อย่างไรก็ตาม เมื่อลองค้นหา Phillip Fry, Fr, หรือ Phil จะไม่พบผลลัพธ์.
  • พฤติกรรมที่ไม่สอดคล้องกันยังเห็นได้สำหรับชื่ออื่นๆ เช่น Wong

ความไม่สอดคล้องนี้เกิดจากวิธีการสร้างคำค้น. การนำไปใช้ในครั้งแรกโดยใช้ฟังก์ชัน CONTAINSTABLE ขาดความยืดหยุ่นที่จำเป็นสำหรับการค้นหาคำบางส่วน.

แนวทางแก้ไข

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

ขั้นตอนที่ 1: ปรับการสร้างสตริงค้นหา

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

การนำไปใช้ตัวอย่าง

นี่คือเวอร์ชันที่ปรับเปลี่ยนของคำค้น SQL:

@Name nvarchar(100),
...
-- เพิ่มบรรทัดนี้เพื่อจัดรูปแบบสตริงค้นหาอย่างถูกต้อง
DECLARE @SearchString varchar(100)

-- แทนที่ช่องว่างด้วยรูปแบบไวด์การ์ด
SET @SearchString = REPLACE(@Name, ' ', '*" OR "*')
SET @SearchString = '"*'+@SearchString+'*"'

SELECT Per.Lastname, Per.Firstname, Per.MiddleName
FROM Person as Per
INNER JOIN CONTAINSTABLE(Person, (LastName, Firstname, MiddleName), @SearchString) AS KEYTBL
ON Per.Person_ID = KEYTBL.[KEY]
WHERE KEY_TBL.RANK > 2
ORDER BY KEYTBL.RANK DESC;

คำอธิบายการเปลี่ยนแปลง

  1. การเพิ่มไวด์การ์ด: โดยการเพิ่ม * ก่อนและหลังคำค้น เราช่วยให้ SQL Server จับคู่ผลลัพธ์บางส่วนได้ ซึ่งหมายความว่าถ้าผู้ใช้ค้นหา Phillip จะพบชื่อที่รวมถึง Phillip.

  2. การจัดการช่องว่าง: ฟังก์ชัน REPLACE จะแปลงข้อมูลเช่น Amy Wong ให้เป็นรูปแบบที่ SQL Server สามารถตีความได้ว่าเป็นคำที่แยกกัน โดยการแทนที่ช่องว่างด้วยไวยากรณ์การค้นหาที่จำเป็นในการค้นหาความแตกต่าง.

  3. การกรองระดับ: คำค้นยังแน่ใจได้ว่าผลลัพธ์ที่มี RANK มากกว่าที่กำหนดจะถูกแสดงผล ซึ่งช่วยให้จัดลำดับความสำคัญของผลลัพธ์ที่เกี่ยวข้องที่สุด.

ข้อสรุป

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

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