Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं एक फ़ील्ड को दूसरे की तुलना में अधिक 'मूल्यवान' बनाने के लिए MySQL पूर्ण टेक्स्ट खोज प्रासंगिकता में कैसे हेरफेर कर सकता हूं?

तीन पूर्ण टेक्स्ट इंडेक्स बनाएं

  • a) कीवर्ड कॉलम पर एक
  • b) सामग्री कॉलम पर एक
  • c) कीवर्ड और सामग्री कॉलम दोनों पर एक

फिर, आपकी क्वेरी:

SELECT id, keyword, content,
  MATCH (keyword) AGAINST ('watermelon') AS rel1,
  MATCH (content) AGAINST ('watermelon') AS rel2
FROM table
WHERE MATCH (keyword,content) AGAINST ('watermelon')
ORDER BY (rel1*1.5)+(rel2) DESC

मुद्दा यह है कि rel1 आपको केवल keyword . में आपकी क्वेरी की प्रासंगिकता प्रदान करता है कॉलम (क्योंकि आपने केवल उस कॉलम पर इंडेक्स बनाया है)। rel2 वही करता है, लेकिन content . के लिए कॉलम। अब आप इन दो प्रासंगिकता स्कोरों को एक साथ जोड़ सकते हैं, अपनी पसंद के किसी भी भार को लागू करते हुए।

हालाँकि, आप वास्तविक खोज के लिए इन दोनों में से किसी एक अनुक्रमणिका का उपयोग नहीं कर रहे हैं। उसके लिए आप अपनी तीसरी अनुक्रमणिका का उपयोग करें, जो दोनों स्तंभों पर है।

इंडेक्स ऑन (कीवर्ड, कंटेंट) आपके रिकॉल को नियंत्रित करता है। उर्फ, क्या लौटाया।

दो अलग-अलग इंडेक्स (केवल कीवर्ड पर एक, केवल सामग्री पर एक) आपकी प्रासंगिकता को नियंत्रित करते हैं। और आप यहां अपना स्वयं का भार मानदंड लागू कर सकते हैं।

ध्यान दें कि आप किसी भी संख्या में विभिन्न इंडेक्स का उपयोग कर सकते हैं (या, अन्य कारकों के आधार पर आपके द्वारा क्वेरी समय पर उपयोग किए जाने वाले इंडेक्स और वेटिंग में भिन्नता हो सकती है ... केवल कीवर्ड पर खोज करें यदि क्वेरी में स्टॉप वर्ड है ... के लिए वेटिंग पूर्वाग्रह कम करें कीवर्ड यदि क्वेरी में 3 से अधिक शब्द हैं ... आदि)।

प्रत्येक अनुक्रमणिका डिस्क स्थान का उपयोग करती है, इसलिए अधिक अनुक्रमणिका, अधिक डिस्क। और बदले में, mysql के लिए उच्च मेमोरी फ़ुटप्रिंट। साथ ही, इंसर्ट में अधिक समय लगेगा, क्योंकि आपके पास अपडेट करने के लिए और इंडेक्स हैं।

आपको अपनी स्थिति के लिए बेंचमार्क प्रदर्शन (बेंचमार्किंग के लिए MySQL क्वेरी कैश को बंद करने के लिए सावधान रहना चाहिए अन्यथा आपके परिणाम खराब हो जाएंगे)। यह Google ग्रेड कुशल नहीं है, लेकिन यह बहुत आसान और "आउट ऑफ़ द बॉक्स" है और यह निश्चित रूप से प्रश्नों में "पसंद" के आपके उपयोग से बहुत बेहतर है।

मुझे लगता है कि यह वास्तव में अच्छा काम करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीडीओ के साथ PHP में, अंतिम एसक्यूएल पैरामीट्रिज्ड क्वेरी कैसे जांचें?

  2. अपने डेटाबेस के लिए MySQL डेटाबेस आकार कैसे प्राप्त करें?

  3. एक MySQL तालिका में डालें या मौजूद होने पर अपडेट करें

  4. MySQL में अल्पविराम के साथ संख्याओं को कैसे प्रारूपित करें

  5. SQL क्वेरी के साथ निकटतम अक्षांश/देशांतर खोजें