2011-07-06 8 views
7

हम MySQL में HTML सामग्री के ब्लॉक संग्रहीत कर रहे हैं (यह CKeditor में बनाए गए प्रारूप को स्वरूपित किया गया है। Ckeidor टेक्स्ट को प्रारूपित करने के लिए इनलाइन सीएसएस शैलियों को जोड़ता है)। हम "page_content" नामक कॉलम में डेटाबेस संग्रहीत कर रहे हैंHTML संग्रहीत सामग्री PHP/MySQL खोजते समय HTML वर्णों को अनदेखा करें?

हम एक खोज सुविधा चाहते हैं जो उपयोगकर्ताओं को टेक्स्ट (केवल) खोजने की अनुमति देती है। हालांकि हम नहीं चाहते हैं कि खोज एचटीएमएल अक्षरों को वापस कर दे जो कि अभी हो रहा है। उदाहरण के लिए, अगर हम "फ़ॉन्ट" खोज हम खोज परिणामों एचटीएमएल शैलियों <font>

वहाँ किसी तरह HTML/CSS पात्रों की अनदेखी करने के है के साथ पृष्ठों वापस जाने के लिए चाहते हैं जब MySQL से खोज कर एचटीएमएल संग्रहीत सामग्री?

उत्तर

2

मुझे लगता है कि आप डेटाबेस पर खोज करना चाहते हैं? (उस स्थिति में, HTML टैग को अलग करना मतलब होगा कि आपको सामग्री को दो बार स्टोर करना होगा)।

प्राकृतिक भाषा मोड में MYSQLs पूर्ण पाठ खोज कार्यक्षमता का उपयोग करने का प्रयास करें।

http://dev.mysql.com/doc/refman/5.0/en/fulltext-natural-language.html

+0

सरल समाधान हमेशा सर्वोत्तम होते हैं। धन्यवाद। – HoldOffHunger

4

आप इन खोजों के लिए एक अलग तालिका की स्थापना पर विचार किया है? MySQL's full text search केवल MyISAM तालिकाओं के साथ काम करता है ताकि आप संभवतः उस महत्वपूर्ण डेटा के साथ पूर्ण टेक्स्ट खोज को मिश्रित नहीं करना चाहते (जब तक, निश्चित रूप से, आपके पास विदेशी कुंजी और संदर्भित अखंडता के लिए कुछ अजीब विचलन नहीं है)।

दृष्टिकोण मैं पहले उपयोग किए गए मूल रूप से यह है:

  • एक सरल (आईडी, खोज_पाठ) संरचना के साथ एक अलग तालिका सेट करें।
    • id आप जिस चीज़ को खोज रहे हैं उसके id से मेल खाता है।
    • search_text सबकुछ (बॉडी टेक्स्ट, शीर्षक, लेखक का नाम, ...) है जिसे आप टेक्स्ट के एक ब्लॉब में मैश किए हुए खोजना चाहते हैं।
  • खोज तालिका पर full text indexing जोड़ें।
  • उचित search_text स्ट्रिंग को सादा पाठ के रूप में बनाने के लिए अपनी डेटाबेस अपडेट प्रक्रिया अपडेट करें; यह वह जगह है जहां आप एचटीएमएल को बाहर निकाल देंगे और संभवतः कुछ अन्य मैपिंग्स (जैसे कि "ए +" जैसी चीज़ों को विस्तारित करने के लिए जो पूर्ण पाठ खोज मिलेगी) लागू करें।
  • खोज करते समय, आप उसी मैपिंग को लागू करते हैं जब आप खोज योग्य डेटा पर लागू होते हैं और फिर मैचों के लिए अपनी खोज तालिका में देखें।

यह (पुनरावृत्ति के माध्यम से खोज पाठ के विभिन्न घटकों भार जैसे द्वारा अपने HTML समस्या का हल है, तो आप HTML सामग्री आसानी से की तुलना में अधिक खोज करने देता है, और आप धुन करने की अनुमति देता खोज परिणामों यदि आप टैग ज्यादा महत्वपूर्ण होना चाहता हूँ बॉडी टेक्स्ट की तुलना में, search_text बनाने के दौरान टैग को दो या तीन बार जोड़ें)।

आपको HTML को हटाने या अनदेखा करने के लिए अपने टेक्स्ट को संसाधित करना होगा। यह दृष्टिकोण आपको हर खोज पर इसे करने के बजाए बस एक बार ऐसा करने देता है।

+0

इस समाधान की कमी की एकमात्र चीज़ एक इकाई के लिए सभी पाठों को एक साथ जोड़ने के परिणामस्वरूप एक विशिष्ट फ़ील्ड को खोजने में सक्षम है। उदाहरण के लिए, आप शीर्षक में 'foo' के साथ सभी इकाइयों को नहीं ढूंढ पाए, क्योंकि शरीर में 'foo' वाली इकाइयां भी मेल खाती हैं। –

+0

@ क्रिस: लेकिन यदि आवश्यक हो तो आप अतिरिक्त कॉलम के साथ उस पर जा सकते हैं। –

+0

@ क्रिस, हम HTML को नहीं हटा सकते हैं। यह Ckeditor (घुमावदार सीएसएस शैलियों) – user635800

संबंधित मुद्दे