Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एकाधिक तालिकाओं में MySQL पूर्ण पाठ खोज प्रासंगिकता

हाँ, आप Apache Lucene और Solr जैसे खोज इंजन का उपयोग करके उन्हें बहुत अच्छी तरह से एकीकृत कर सकते हैं।

http://lucene.apache.org/solr/

यदि आपको इसे केवल MySQL में करने की आवश्यकता है, तो आप इसे UNION के साथ कर सकते हैं। आप शायद किसी भी शून्य-प्रासंगिक परिणाम को दबाना चाहेंगे।

आपको यह तय करना होगा कि आप किस तालिका के मिलान के आधार पर प्रासंगिकता को प्रभावित करना चाहते हैं।

उदाहरण के लिए, मान लीजिए कि आप चाहते हैं कि लेख सबसे महत्वपूर्ण हों, ईवेंट मध्यम महत्वपूर्ण हों, और पृष्ठ कम से कम महत्वपूर्ण हों। आप इस तरह से गुणकों का उपयोग कर सकते हैं:

set @articles_multiplier=3;
set @events_multiplier=2;
set @pages_multiplier=1;

यहां एक कार्यशील उदाहरण दिया गया है जिसे आप आजमा सकते हैं जो इनमें से कुछ तकनीकों को प्रदर्शित करता है:

नमूना डेटा बनाएं:

create database d;
use d;

create table articles (id int primary key, content text) ENGINE = MYISAM;
create table events (id int primary key, content text) ENGINE = MYISAM;
create table pages (id int primary key, content text) ENGINE = MYISAM;

insert into articles values 
(1, "Lorem ipsum dolor sit amet"),
(2, "consectetur adipisicing elit"),
(3, "sed do eiusmod tempor incididunt");

insert into events values 
(1, "Ut enim ad minim veniam"),
(2, "quis nostrud exercitation ullamco"),
(3, "laboris nisi ut aliquip");

insert into pages values 
(1, "Duis aute irure dolor in reprehenderit"),
(2, "in voluptate velit esse cillum"),
(3, "dolore eu fugiat nulla pariatur.");

इसे खोजने योग्य बनाएं:

ALTER TABLE articles ADD FULLTEXT(content);
ALTER TABLE events ADD FULLTEXT(content);
ALTER TABLE pages ADD FULLTEXT(content);

इन सभी तालिकाओं को खोजने के लिए यूनियन का प्रयोग करें:

set @target='dolor';

SELECT * from (
  SELECT 
    'articles' as 'table_name', id, 
    @articles_multiplier * (MATCH(content) AGAINST (@target)) as relevance
    from articles
  UNION
  SELECT 
    'events' as 'table_name', 
    id,
    @events_multiplier * (MATCH(content) AGAINST (@target)) as relevance
    from events
  UNION
  SELECT 
    'pages' as 'table_name', 
    id, 
    @pages_multiplier * (MATCH(content) AGAINST (@target)) as relevance
    from pages
)
as sitewide WHERE relevance > 0;

परिणाम:

+------------+----+------------------+
| table_name | id | relevance        |
+------------+----+------------------+
| articles   |  1 | 1.98799377679825 |
| pages      |  3 | 0.65545331108093 |
+------------+----+------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पारंपरिक प्रतिकृति से GTID में माइग्रेट करें

  2. समय श्रृंखला डेटा को कुशलतापूर्वक संग्रहीत करना:mySQL या फ्लैट फ़ाइलें? WHERE कंडीशन के साथ कई टेबल (या फाइल्स) या क्वेश्चन?

  3. सिम्फनी वाईएमएल कॉन्फ़िगरेशन फ़ाइल में डॉकर से एनवी चर कैसे प्राप्त करें?

  4. चेतावनी:mysql_num_rows ():आपूर्ति किया गया तर्क मान्य MySQL परिणाम संसाधन नहीं है

  5. रिपोर्ट में दो तालिकाओं से क्वेरी