ใช้ mysql 4.4 อยู่ครับ ดาต้าเบสใช้ UTF-8 แล้วต้องใช้การค้นหาชื่อสมาชิก
ทีนี้บางครั้งสมาชิกใส่ชื่อตัวเองแบบสะกดผิดมา เช่น สมพงษ์ กลายเป็น สมพงษื
ถ้าหาปกติจะไม่เจอ :-X
ใครพอมีเทคนิคที่สามารถค้นหาแบบหลวมๆ หาพวกตัวสะกดผิดได้บ้างไหมครับ
ไม่รู้จะใช้ได้มั้ยเปล่านะครับ ถ้าเป็นผมคงต้องแยก query เป็นชุดๆ ตามตัวอักษรเอาหนะครับ เช่น หาคำว่า สมพงษื
แรกสุดหาคำว่า 'สม' ก่อนถ้าไม่เจอก็จบแต่ถ้าเจอ
หาคำว่า 'สมพ' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สม' ไปโชว์แทนแต่ถ้าเจอ
หาคำว่า 'สมพง' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สมพ' ไปโชว์แทนแต่ถ้าเจอ
หาคำว่า 'สมพงษ' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สมพง' ไปโชว์แทน
ไล่ไปแบบนี้เรื่อยๆหนะครับ
อ้างถึงจาก: spmazon ใน 18 กรกฎาคม 2011, 17:54:30
ไม่รู้จะใช้ได้มั้ยเปล่านะครับ ถ้าเป็นผมคงต้องแยก query เป็นชุดๆ ตามตัวอักษรเอาหนะครับ เช่น หาคำว่า สมพงษื
แรกสุดหาคำว่า 'สม' ก่อนถ้าไม่เจอก็จบแต่ถ้าเจอ
หาคำว่า 'สมพ' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สม' ไปโชว์แทนแต่ถ้าเจอ
หาคำว่า 'สมพง' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สมพ' ไปโชว์แทนแต่ถ้าเจอ
หาคำว่า 'สมพงษ' ต่อถ้าไม่เจอก็เอาผลการค้นหาของ 'สมพง' ไปโชว์แทน
ไล่ไปแบบนี้เรื่อยๆหนะครับ
+1
ตอนนี้ผมก็ใช้แบบนี้อยู่ครับ แถมเอามา OR กันหมดเลย แถมใส่ score ด้วย CASE (ถ้าตรงตามเงื่อนไขเยอะก็จะ score จะสูง) ทีนี้มันก็จะช้าสุดๆๆ แถมได้ผลดีกับคำที่สะกดผิดตอนต้นหรือท้ายคำ ไม่ค่อยได้ผลดีต่อคำที่สะกดผิดตรงกลางคำเท่าไหร่ (เช่น พงษืศักดิ์)
:-X
ดันๆ
:wanwan020:
ศึกษา เรื่อง soundex น่าจะช่วยได้ครับ
set collation ของ db ให้ตรงกับ code
ไม่แน่ใจว่า charset ใช้อะไรครับ
ผมลองคิดเล่นๆ นะครับ ไม่เคยทำจริงๆ
ปกติการพิมพ์ผิดจะเกิดจาก 2 กรณีคือ จิ้ม keyboard ผิด หรือ สะกดผิด
1. การกด keyboard ผิด ส่วนมากจะกดผิดมาเป็นตัวอักษรที่อยู่ใกล้ๆ
2. การสะกดผิดจะเกิดจากการพ้องเสียง เช่น สี /ศรี กานต์/กาน/การ
เวลาที่ user กรอกข้อมูลมา 1 คำ เราก็จะนำมาคำนวนหาความน่าจะเป็นว่า คำนี้สามารถเป็นอะไรได้บ้าง แล้วก็ค้นหาคำเหล่านั้นทั้งหมด
:wanwan020: ผมคิดว่าแบบนี้ก็น่าจะใช้ได้นะครับเพียงแต่ต้องมีการเก็บข้อมูลนานหน่อย
อย่างสมมติ
- ผู้ใช้งานต้องการจะค้นหาคำว่า `นักศึกษา` แต่พิมพ์ผิดเป็น `oydL7dKk` เพราะลืมสลับระหว่างภาษาไทยและอังกฤษ
search: oydL7dKk
result: 0
- เมื่อระบบค้นหาในครั้งแรก ยังไงก็ไม่เจอแน่นอน แต่ระบบก็จะเก็บไว้ว่ามีการค้นหาคำนี้น่ะ และให้โอกาสผู้ใช้งาน ค้นหาอีกครั้ง
try again search: นักศึกษา
result: != 0
- เมื่อผู้ใช้งานป้อนคำที่จะค้นหาใหม่ และเมื่อระบบค้นหาเจอ ก็ให้ทำการ เชื่อมโยงคำๆ นี้ว่าผู้ใช้งานต้องการผลลัพธ์อย่างนี้
failure word => oydL7dKk, success word => นักศึกษา
- และให้ระบบ เก็บค่าน้ำหนักของคำที่ค้นเจอ และหากว่ามีการค้นหาคำๆ นี้หลายๆ ครั้งเราก็เก็บค่าที่ถูกต้อง และให้น้ำหนักไปเรื่อยๆ
failure word => oydL7dKk, success word => นักศึกษา, weight => 1 point
สุดท้ายเมื่อผู้ใช้งาน ค้นหาคำแล้วไม่เจอผลลัพธ์ เราก็นำคำค้นหามาตรวจสอบกับรายการเดิมๆ และเลือก suggest คำที่มีน้ำหนักมากที่สุดให้
ประมาณนี้ครับ
โอเคครับ
เข้าใจคำถามแล้ว -*- ตอนแรกมึน ๆ ไม่เข้าใจ
งั้นทางออกที่ดี ผมว่าลองศึกษา AJAX Auto complete ครับ ถ้านึกภาพไม่ออกให้นึกถึงเวลา search facebook หรือ google พิม "สมศ" ก็ลิสมาให้เลือกเลยว่า จะเป็น สมศรี สมศักดิ๋ ... etc.