LOWER()
का उपयोग कर आप mysql के केस-संवेदी REPLACE()
फ़ंक्शन के मुद्दे को दूर कर सकते हैं।
इसकी मैला, लेकिन मेरे अंत में यह क्वेरी बहुत तेज चलती है।
चीजों को गति देने के लिए मैं परिणाम में पुनर्प्राप्ति को पुनर्प्राप्त करता हूं जिसे मैंने अपनी 'बाहरी' क्वेरी में व्युत्पन्न तालिका के रूप में घोषित किया है। चूंकि mysql के पास पहले से ही इस बिंदु पर परिणाम हैं, प्रतिस्थापन विधि बहुत तेज़ी से काम करती है।
मैंने एकाधिक तालिकाओं और एकाधिक कॉलम में एकाधिक शर्तों की खोज के लिए नीचे दिए गए एक जैसा प्रश्न बनाया है।मैं प्राप्त सभी स्तंभों में सभी पाया खोज शब्दों के occurrances की गिनती की राशि के लिए एक 'प्रासंगिकता' संख्या बराबर की खोज
SELECT DISTINCT (
((length(x.ent_title) - length(replace(LOWER(x.ent_title),LOWER('there'),'')))/length('there'))
+ ((length(x.ent_content) - length(replace(LOWER(x.ent_content),LOWER('there'),'')))/length('there'))
+ ((length(x.ent_title) - length(replace(LOWER(x.ent_title),LOWER('another'),'')))/length('another'))
+ ((length(x.ent_content) - length(replace(LOWER(x.ent_content),LOWER('another'),'')))/length('another'))
) as relevance,
x.ent_type,
x.ent_id,
x.this_id as anchor,
page.page_name
FROM (
(SELECT
'Foo' as ent_type,
sp.sp_id as ent_id,
sp.page_id as this_id,
sp.title as ent_title,
sp.content as ent_content,
sp.page_id as page_id
FROM sp
WHERE (sp.title LIKE '%there%' OR sp.content LIKE '%there%' OR sp.title LIKE '%another%' OR sp.content LIKE '%another%') AND (sp_content.title NOT LIKE '%goes%' AND sp_content.content NOT LIKE '%goes%')
) UNION (
[search a different table here.....]
)
) as x
JOIN page ON page.page_id = x.page_id
WHERE page.rstatus = 'ACTIVE'
ORDER BY relevance DESC, ent_title;
आशा इस मदद करता है किसी को
- सीक्रेस्ट बाहर
यह जाँच करता है कि कितने पंक्तियों खोज स्ट्रिंग शामिल मदद करता है। प्रश्नकर्ता यह जानना चाहता है कि प्रत्येक पंक्ति में खोज स्ट्रिंग कितनी बार निहित होती है। – flu