2015-01-14 6 views
6

तो मैं नीचे पढ़ने दिया गया है:MySQL प्रासंगिकता खोज कुछ कॉलम उच्च रैंकिंग

How can I manipulate MySQL fulltext search relevance to make one field more 'valuable' than another?

मैं प्रतिक्रिया नीचे में दिलचस्पी थी और सफलता के साथ इसे लागू करने की कोशिश की।

SELECT url, keywords, title, 
    MATCH (keywords) AGAINST ('green watermelon') AS rel1, 
    MATCH (title) AGAINST ('green watermelon') AS rel2 
FROM straight 
WHERE MATCH (keywords,title) AGAINST ('green watermelon') 
ORDER BY (rel1)+(rel2*1.5) 

मेरी एकमात्र समस्या निम्न है।

एक उपयोगकर्ता कहते हैं कि "ग्रीन तरबूज" जो नीचे के रूप में 2 कॉलम के साथ एक मेज में 3 पंक्तियों से मेल खाता है के लिए खोज करने के लिए है, तो:

 
+------------+------------+ 
| Keyword | Title  | 
+------------+------------+ 
| Green  | Green  | 
| Green  | Watermelon | 
| Watermelon | Watermelon | 
+------------+------------+ 

मैं "रैंकिंग" होने वाली पहली यह के रूप में दूसरा रिकॉर्ड चाहते हैं सबसे प्रासंगिक है, लेकिन कीवर्ड और शीर्षक के भीतर दो बार "ग्रीन" का उपयोग होने के कारण खोज शब्द "ग्रीन तरबूज" के लिए सभी की समान प्रासंगिकता है।

मुझे लगता है कि यह हल करने का सबसे अच्छा तरीका यह है कि अगर यह कहता है कि यह हरे रंग का शब्द पाता है तो यह कहता है कि यह हरे रंग के शब्द को 1 बार कहता है और किसी अन्य बार यह हरा शब्द को देखता है तो यह 0 से बढ़ जाता है, अगर यह तरबूज देखता है तो यह करता है वही। यह दूसरा परिणाम 2 का प्रासंगिकता स्कोर और अन्य 2 पंक्तियों की प्रासंगिकता 1 प्रदान करेगा। इसलिए इसे और अधिक प्रासंगिक बनाना चाहिए। फिर बड़े डेटाबेस में खोज करते समय यह लंबे समय तक खोज शब्दों के लिए काम करेगा।

संपादित करें:

मैं एक और स्तंभ दोनों शीर्षक और कीवर्ड वाला बना सकते हैं, इसलिए कहते स्तंभ कहा जाता है यदि संभव हो तो "मैशअप" तालिका अब और अधिक तरह दिखेगा:

 
+------------+------------+-----------------------+ 
| Keyword | Title  | Mashup    | 
+------------+------------+-----------------------+ 
| Green  | Green  | Green Green   | 
| Green  | Watermelon | Green Watermelon  | 
| Watermelon | Watermelon | Watermelon Watermelon | 
+------------+------------+-----------------------+ 

 
+------------+------------+-----------------------+ 
| Keyword | Title  | Mashup    | 
+------------+------------+-----------------------+ 
| Green  | Green  | Green     | 
| Green  | Watermelon | Green Watermelon  | 
| Watermelon | Watermelon | Watermelon   | 
+------------+------------+-----------------------+ 

फिर खोज के रूप में सही प्रासंगिकता स्कोर के साथ इरादा काम करेगा:

फिर "यदि संभव हो तो" हम क्षेत्रों को धोखा तो वे की तरह अंत डी की आवश्यकता होगी।

अग्रिम

+1

आप एक sqlfiddle सेटअप कर सकते हैं? – Mihai

+0

@ मिहाई क्षमा करें मैंने पहले कभी एक सेट नहीं किया है, क्या इससे आपको यह देखने में मदद मिलेगी कि आप क्या कर रहे हैं? – BubblewrapBeast

+1

हाँ, मैं इसके साथ थोड़ा सा खेलना चाहता हूं, अगर मुझे पता था कि मैं क्या जवाब दूंगा। बस कुछ पंक्तियों वाली एक टेबल। – Mihai

उत्तर

0

आप केवल अपने मैच के पहले की स्थिति में और अधिक महत्वपूर्ण स्तंभ निर्दिष्ट करने की आवश्यकता धन्यवाद()

SELECT url, keywords, title 
     FROM straight 
     WHERE MATCH(title, keywords) AGAINST('green watermelon') 
     ORDER BY MATCH(title, keywords) AGAINST('green watermelon') DESC; 

+------+------------+------------+ 
| id | keywords | title  | 
+------+------------+------------+ 
| 2 | Green  | Watermelon | 
| 3 | Watermelon | Green  | 
| 1 | Green  | Green  | 
+------+------------+------------+ 
संबंधित मुद्दे