तीन पूरा टेक्स्ट अनुक्रमित
- क) कीवर्ड कॉलम एक
- ख) दोनों एक ही कीवर्ड और सामग्री पर सामग्री स्तंभ पर एक
- ग) एक बनाएं कॉलम
फिर, आपकी क्वेरी:
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)
बिंदु यह है कि rel1
आपको keyword
कॉलम में केवल अपनी क्वेरी की प्रासंगिकता देता है (क्योंकि आपने केवल उस कॉलम पर अनुक्रमणिका बनाई है)। rel2
वही करता है, लेकिन content
कॉलम के लिए। अब आप इन दो प्रासंगिकता स्कोर को जोड़कर अपनी पसंद के भार को लागू कर सकते हैं।
हालांकि, अगर आप वास्तविक खोज के लिए इन किसी एक के इंडेक्स का उपयोग नहीं कर रहे हैं। इसके लिए, आप अपनी तीसरी अनुक्रमणिका का उपयोग करते हैं, जो दोनों कॉलम पर है।
(कीवर्ड, सामग्री) पर सूचकांक आपकी याद को नियंत्रित करता है। उर्फ, क्या लौटाया जाता है।
दो अलग-अलग अनुक्रमित (एक कीवर्ड पर केवल सामग्री पर एक ही) अपने प्रासंगिकता नियंत्रित करते हैं। और आप यहां अपना खुद का भार मानदंड लागू कर सकते हैं।
ध्यान दें कि आप किसी भी प्रकार की विभिन्न इंडेक्स का उपयोग कर सकते हैं (या, अन्य कारकों के आधार पर आप क्वेरी समय पर उपयोग किए गए इंडेक्स और वेटिंग्स को अलग-अलग कर सकते हैं ... केवल क्वेरी पर खोज करें यदि क्वेरी में स्टॉप शब्द है ... कमी कीवर्ड में वेटिंग पूर्वाग्रह यदि क्वेरी में 3 से अधिक शब्द हैं ... आदि)।
प्रत्येक सूचकांक डिस्क स्थान है, इसलिए अधिक अनुक्रमित है, और अधिक डिस्क का उपयोग करता है। और बदले में, mysql के लिए उच्च स्मृति पदचिह्न। साथ ही, प्रविष्टियों में अधिक समय लगेगा, क्योंकि आपके पास अपडेट करने के लिए अधिक अनुक्रमणिका हैं।
आपको बेंचमार्क प्रदर्शन अपनी स्थिति के लिए (और कुछ अपने परिणामों को बेंचमार्क करने के लिए mysql क्वेरी कैश बंद करने के लिए सावधान किया जा रहा विषम किया जाएगा) चाहिए। यह Google ग्रेड कुशल नहीं है, लेकिन यह बहुत आसान है और "बॉक्स से बाहर" है और यह निश्चित रूप से प्रश्नों में "जैसे" के उपयोग से बहुत बेहतर है।
मुझे लगता है कि यह वास्तव में अच्छी तरह से काम करता है।
ठीक है, मैं यह काम करने में सक्षम था। धन्यवाद! – Buzz
जैसे कथन का उपयोग करना खोज चलाने के लिए एक शानदार तरीका नहीं है। सबसे पहले, जब तक आप तारों को विभाजित नहीं करते हैं, तो आप केवल सटीक क्रम में मेल खाते हैं। यानी 'LIKE'% t-shirt लाल% 'खोज' आपके डेटाबेस में 'लाल टी-शर्ट' से मेल नहीं खाएगा। दूसरा, आप अपनी क्वेरी निष्पादित करने के लिए उच्च समय के साथ समाप्त होते हैं, क्योंकि LIKE एक पूर्ण तालिका स्कैन करता है। – ChrisG
@ChrisG 'LIKE' एक पूर्ण तालिका स्कैन करता है जब इसे' SELECT' – gontard