การนำ 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;
คำอธิบายการเปลี่ยนแปลง
-
การเพิ่มไวด์การ์ด: โดยการเพิ่ม
*
ก่อนและหลังคำค้น เราช่วยให้ SQL Server จับคู่ผลลัพธ์บางส่วนได้ ซึ่งหมายความว่าถ้าผู้ใช้ค้นหาPhillip
จะพบชื่อที่รวมถึงPhillip
. -
การจัดการช่องว่าง: ฟังก์ชัน
REPLACE
จะแปลงข้อมูลเช่นAmy Wong
ให้เป็นรูปแบบที่ SQL Server สามารถตีความได้ว่าเป็นคำที่แยกกัน โดยการแทนที่ช่องว่างด้วยไวยากรณ์การค้นหาที่จำเป็นในการค้นหาความแตกต่าง. -
การกรองระดับ: คำค้นยังแน่ใจได้ว่าผลลัพธ์ที่มี
RANK
มากกว่าที่กำหนดจะถูกแสดงผล ซึ่งช่วยให้จัดลำดับความสำคัญของผลลัพธ์ที่เกี่ยวข้องที่สุด.
ข้อสรุป
โดยการปรับแต่งคำค้น SQL Server ของคุณด้วยเทคนิคเหล่านี้ คุณจะปรับปรุงประสิทธิภาพและความถูกต้องของฟังก์ชันการค้นหาข้อความเต็มของคุณ นี่ไม่เพียงแต่ช่วยเพิ่มประสบการณ์ของผู้ใช้ แต่ยังทำให้แอปพลิเคชันรู้สึกตอบสนองต่อการเปลี่ยนแปลงในข้อมูลที่ป้อนเสมอ จำไว้ว่ากุญแจสู่การค้นหาที่มีประสิทธิภาพมักขึ้นอยู่กับวิธีที่ข้อมูลที่ป้อนได้รับการเข้าใจและดำเนินการโดยฐานข้อมูล.
ด้วยการนำกลยุทธ์เหล่านี้ไปใช้ แอปพลิเคชันของคุณจะให้ผลลัพธ์การค้นหาที่มีประสิทธิภาพ ช่วยให้ผู้ใช้ค้นหาข้อมูลที่ต้องการได้ โดยไม่คำนึงถึงวิธีที่พวกเขาใส่คำค้นของพวกเขา หากคุณมีคำถามเพิ่มเติมหรือจำเป็นต้องมีการชี้แจงเพิ่มเติม โปรดอย่าลังเลที่จะติดต่อ!