ฉันต้องการคำแนะนำเกี่ยวกับวิธีการจัดระเบียบข้อมูลของฉันเพื่อการค้นหาข้อความที่มีประสิทธิภาพและรวดเร็ว
พื้นหลัง
ฉันมีแอปพลิเคชัน (ใน PHP) ที่ผู้ใช้สามารถจัดระเบียบบทความและสร้างแบบฟอร์มและฟิลด์แบบไดนามิกเพื่อจุดประสงค์นั้นได้ หมายความว่าบทความหนึ่งสามารถมีแอตทริบิวต์ Type,Brand,Color และอีกบทความหนึ่งสามารถมี Type,Material,Color,Content เป็นแอตทริบิวต์ได้ โดยพื้นฐานแล้วผู้ใช้สามารถสร้างคุณลักษณะได้มากเท่าที่เขาชอบ...
จากนั้น ฉันจะต้องสามารถค้นหาและจัดเรียงแอตทริบิวต์ "ที่ไม่รู้จัก" เหล่านี้ได้ ฉันยังต้องสามารถอ่านแอตทริบิวต์ทั้งหมดได้ในกรณีที่ผู้ใช้ต้องการแก้ไขบทความ
ทางออกของฉัน
แนวคิดแรกของฉัน (และแนวคิดเดียวจนถึงขณะนี้) คือการเข้ารหัสคุณลักษณะทั้งหมดลงในฟิลด์ TEXT
เดียวด้วยดัชนี FULLTEXT
(ต้องเป็น MyISAM จึงจะทำงานได้) เช่น:
__Type="3",__Brand="Nokia",__Color="6"
__Type="2",__Material="7",Color="2",Content="MP3 Player,2 Apples, 1 book: Larry King"
คุณลักษณะจะได้รับคำนำหน้าและ/หรือคำนำหน้าเพื่อไม่ให้สับสนกับค่าในแอตทริบิวต์ หรือทำให้แอตทริบิวต์เป็นอนุกรมด้วย JSON
จากนั้น ฉันสามารถสร้างแบบสอบถามตามแอตทริบิวต์ที่เลือก เช่น:
SELECT * FROM Articles a
WHERE Attribute LIKE '%__TYPE="2"%'
AND Attribute LIKE '%__Color="2"%'
หากแอตทริบิวต์ว่างเปล่า จะไม่รวมไว้ และทำให้สามารถรวมการค้นหาในบทความทั้งหมดที่มีชุดคุณลักษณะเฉพาะ โดยไม่คำนึงถึงค่า
ปัญหา
ปัญหาหรือไม่สิ่งที่ฉันกังวลคือประสิทธิภาพการค้นหาเมื่อฐานข้อมูลเต็มไปด้วยบทความนับพัน
ปัญหาอีกประการหนึ่งคือการค้นหาคำเฉพาะภายในคุณลักษณะเฉพาะ เช่น:
Content="เครื่องเล่น MP3,แอปเปิ้ล 2 ลูก, 1 เล่ม: Larry King"
สมมติว่าฉันต้องการรับแถวที่เนื้อหาแอตทริบิวต์มีวลี "Larry King" อยู่ที่ไหนสักแห่ง ฉันไม่คิดว่าจะทำอย่างนั้นได้ในคำถาม SQL เดียวกันโดยไม่ได้รับการจับคู่ในทุกแถวที่มี "Larry King" อยู่ที่ไหนสักแห่ง
ฉันเปิดรับข้อเสนอแนะ/การอภิปรายเกี่ยวกับตาราง ฟิลด์ และความสัมพันธ์ที่ฉันควรสร้างเพื่อให้บรรลุเป้าหมายที่อธิบายไว้
ขอบคุณ