MySQL სრული ტექსტი ძიება

დღეს მე ითამაშა ოპტიმიზაცია ნელი SQL განაცხადის გვარის

SELECT * FROM 'table' WHERE `field` LIKE '%word%'

სად არის პრობლემა ახლა აქ – ბოლო ნაწილი '% სიტყვა%’ და კიდევ უფრო კონკრეტული გმირები % ადრე სიტყვა, რომლებიც. მიმაგრებული სიმბოლო % ,სანამ რაიმე მნიშვნელობა, პირდაპირ გვაიძულებს შეკითხვის პირდაპირ ნელი, რადგან ამ გზით განაცხადის აჩერებს us გამოიყენოთ მაჩვენებლების სფერო. გადაწყვეტილებები, როგორც ყოველთვის, მაგრამ ყოველთვის არ არის ნათელი 😆 საერთო MySQL მათ აქვთ ამ პრობლემის სრული ძიება ინდექსირებას სფეროში. როგორ ამჯამად შეცვლის სფეროში აქვს ბევრი წერილობითი დოკუმენტაცია, მაგრამ დაჩქარების აღწერს თუ როგორ უნდა შეიცვალოს უმთავრესი მოთხოვნა, იმიტომ, რომ ჩვენ კიდევ ცოტა დრამა საბოლოოდ. Sledka როგორც მოქმედი სრული ველში, პროგრამა უნდა იყოს ცვლილებები ტიპი:

SELECT * FROM `table` WHERE MATCH (field) AGAINST ('word')

ასე რომ სტრუქტურა აშკარაა და არ სჭირდება ზედმეტი დისკუსია. აღნიშნული მოთხოვნის ძალაში შევა, თუ სიტყვა, თქვენ თხოვნით მინიმუმ 4 სიმბოლოები, ნაგულისხმები მნიშვნელობა, თუ გვინდა, რომ ცვლილებები უნდა მიუთითოთ ღირებულება, გსურთ აფეთქდა.cnf განყოფილებაში [tusdi] დეკლარაცია ft_min_word_len= 3 ან 2, 1 ცხადია, კარგი არჩევანი 😉 . მას შემდეგ, რაც შეცვლის ღირებულება და გადატვირთვა mysql სერვერზე საჭიროება უნდა გააკეთოს რემონტი თქვენი მაგიდები, იმისათვის, რომ ახალი ინდექსირებას შევა ძალაში. ჯერჯერობით ყველაფერი ნათელია: ცვლილებების შეტანა, გადატვირთვის, rebildvam ინდექსები და ნუ ჩემი თხოვნა და ანაზღაურება 0 შემოწმების მიზნით, 😀

SHOW VARIABLES

მე ვხედავ, რომ ღირებულებები, მე ვთხოვე ძალაში, rebildvam ერთხელ ინდექსები – იგივე შედეგი. უსიამოვნო 🙄, ძალიან არასასიამოვნო. აქედან იგი დაიწყო დიდი ლანძღვა და scratching გასაღები ფარდული 😀, რომელიც იყო საკმაოდ, საკმაოდ საინტერესო. მთელ, კითხვა დავიწყე დოკუმენტაცია არ ვიცი, რომელი გზა და მოვიდა საინტერესო პასაჟი

ასეთი ტექნიკა მუშაობს, საუკეთესო დიდი კოლექციები (სინამდვილეში, იგი ყურადღებით tuned ამ გზით). ძალიან პატარა მაგიდები, სიტყვა განაწილების ადექვატურად არ ასახავს მათი სემანტიკური მნიშვნელობა, და ეს მოდელი შეიძლება ზოგჯერ აწარმოოს უცნაური შედეგები. მაგალითად, მიუხედავად იმისა, რომ სიტყვა "MySQL" იმყოფება ყოველ გრაფაში სტატიები მაგიდა ნაჩვენებია ადრე, საძიებო სიტყვა არ აწარმოებს შედეგები

სხივი 😳 მისცეს უჯრა და მე ვიყავი პატარა – მიუხედავად ამისა, ეს იყო ტესტი. ჩვენი განაცხადის დიდი მაგიდა მეტი 2 000 000 მიზნით და იქ რამ ეძინა. ისე ახლა ნათელია პრობლემა. იმისათვის, რომ კონკრეტული გადაწყვეტილება, მე აღვნიშნო მოკლედ, რომელიც მხარს უჭერს სრული ტექსტი ძიება 3 გაფართოებული რეჟიმი ლოგიკური , გამოხატვაზე და ბუნებრივი ენით როგორც ბოლო ნამუშევარი იყოს. რეჟიმებისთვის შეგიძლიათ ნახოთ დოკუმენტაცია, მე ავუხსნათ 2-3 ლოგიკური სიტყვა, რადგან ეს არის გასაღები. იგი მხარს უჭერს ლოგიკური ოპერატორები ასეთი და, ან , არ და ასე შემდეგ და შეუძლია ჯადოსნური პოპულარული ფრაზები, ერთ-ერთი, არსებობს სხვა და სხვა. შენარჩუნება და სიმბოლოები *, რომელიც უდრის wildcard სიმბოლო % ეს არის სასარგებლო 😉, როდესაც საძიებო ტერმინი ნაკლებია ხანგრძლივობა ft_min_word_len და პატარა ქაღალდის ;). ყოველ შემთხვევაში, მე მაგიდასთან შესახებ 100 იმისათვის აკეთებს სრულყოფილი სამუშაო. ტოვებს მხოლოდ ვხედავ და დასრულდა მოთხოვნა:

SELECT * FROM `table` WHERE MATCH (field)
AGAINST ('*word*' IN BOOLEAN MODE)

აქ ჩნდება მომენტში თუ არა ჩვენი ინდექსირებას მუშაობს სიმბოლოების – პასუხი არის, არ ვიცი. ზოგადად, მე ვფიქრობ,, რა, იმიტომ, რომ ეს არ არის სხვაგვარად დოკუმენტაცია, მაგრამ დოკუმენტაცია არ მკაფიოდ ვთქვა, ან შოუ, ბევრი რამ 😀

გაუმჯობესებულია Zemanta

2 კომენტარები

  1. სრული ტექსტი ძიება არის ძალიან გამძლე Hawa, როგორც დავიწყე, რათა გამოიყენონ ეს მე დავიბადე. მხოლოდ, როდესაც ძალიან დიდი მაგიდები და ის გიჟი. 🙂

    1. დიდი მაგიდები უკვე არსებობს სხვა გადაწყვეტილებები 😉 ტიხრები მაგალითად, ან სხვა mechanismn სრული ტექსტი ძიება სფინქსის

დატოვეთ პასუხი

თქვენი ელ-ფოსტა არ გამოქვეყნდება. აუცილებელი ველები მონიშნულია *

ანტი სპამი *