2011-09-16 20 views
7

मैं एक छोटी सी समस्या (है कि मैं क्या आशा है) mysql डेटाबेस में पूर्ण पाठ खोज के मेरे खोज परिणाम रैंकिंग के साथ की है। दो तरह से इसे लिखने मैं कोशिश की है:पूर्ण पाठ खोज रैंकिंग

प्राकृतिक तरीके:

SELECT SQL_CALC_FOUND_ROWS *, 
MATCH(productname,keywords) AGAINST('$cl_search') AS score 
FROM products 
WHERE MATCH(productname,keywords) AGAINST('$cl_search') 
ORDER BY score DESC,lastupdated DESC; 

बूलियन रास्ता:

SELECT SQL_CALC_FOUND_ROWS *, 
((MATCH(productname) AGAINST('$cl_search' IN BOOLEAN MODE))+ 
(MATCH(keywords) AGAINST('\"$cl_search\"' IN BOOLEAN MODE))) AS score 
FROM products 
WHERE MATCH(productname,keywords) AGAINST('$cl_search') 
ORDER BY score DESC,lastupdated DESC; 

जब मैं प्राकृतिक भाषा मोड में खोज रहा अनुक्रमण मैं पसंद है, लेकिन मैं कैसे कर यानी "बैग बैग बैग बैग बैग" में प्रवेश करने से किसी को रोकने के रूप में PRODUCTNAME अच्छा खोज परिणाम प्राप्त करने?

तो मैं लेकिन यह तय करने के लिए बूलियन रास्ता 1. ने लिखा कि यह धीमी है और 2. मैं की तरह 'शब्द गणना की तुलना में' अन्य प्रासंगिकता अनुक्रमण नहीं मिलता है।

कैसे दोनों दुनिया का सबसे अच्छा पाने के लिए पर कोई विचार?

उत्तर

-3

काफी आसान है, Lucene का उपयोग करने के बजाय, यह बहुत अधिक उन्नत है और निश्चित रूप से विकल्प आप क्या चाहते हैं संभाल करने के लिए है।

1

क्या एक उपयोगकर्ता परिभाषित समारोह है, जो डुप्लीकेट कीवर्ड निकाल देंगे लिखने के बारे में? तो आपकी क्वेरी कैसी दिखाई देगी:

SELECT SQL_CALC_FOUND_ROWS *, 
MATCH(productname,RM_DUP(keywords)) AGAINST('$cl_search') AS score 
FROM products 
    WHERE MATCH(productname,RM_DUP(keywords)) AGAINST('$cl_search') 
    ORDER BY score DESC,lastupdated DESC; 
संबंधित मुद्दे