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

उबंटू पर mysql ft_min_word_len परिवर्तन काम नहीं करता है

मैं समस्या और समाधान ढूंढ़ने में सक्षम था।

पूर्ण पाठ खोज सेटिंग अच्छी थी क्योंकि मैं ऑल्ट ईस्ट 2 शब्दों के साथ खोजना चाहता था और मेरे पास ft_min_word_len = 2 था

अब और परीक्षण करते हुए मैंने पाया कि यह बेतरतीब ढंग से कुछ 2 वर्ण शब्दों की खोज करता है और दूसरे को अनदेखा करता है।

यहाँ एक उदाहरण है

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    body TEXT,
    FULLTEXT (title,body)
);

INSERT INTO articles (title,body) VALUES
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('use');
Empty set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('Use');
Empty set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('you');
Empty set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('the');
Empty set (0.00 sec)

mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('vs.');
Empty set (0.00 sec)

लेकिन निम्नलिखित काम करता है

mysql> SELECT * FROM articles
    -> WHERE MATCH (title,body) AGAINST ('run');
+----+-------------------+-------------------------------------+
| id | title             | body                                |
+----+-------------------+-------------------------------------+
|  4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... |
+----+-------------------+-------------------------------------+

तो यह कुछ और है और जाहिर तौर पर इसका ft_stopword_file मिल गया है जिसमें शब्दों की एक सूची होती है और यदि उनमें से किसी एक के साथ कोई खोज होती है तो वह कुछ नहीं करता है।

सूची यहाँ है http://dev.mysql.com /doc/refman/5.1/hi/fulltext-stopwords.html

तो इस मामले में कम से कम 2 वर्ण लंबा किसी भी शब्द खोज की अनुमति देने के लिए

  • ft_min_word_len को 2 पर सेट करें
  • फिर डेबियन /etc/mysql/my.cnf के लिए mysql कॉन्फ़िगरेशन फ़ाइल में ft_stopword_file='path/to/stopword_file.txt' जोड़ें
  • यदि आवश्यक हो तो हम इस फ़ाइल को खाली छोड़ सकते हैं।

ओह एक और बात जब हम उपरोक्त सेटिंग्स करते हैं तो हमें mysql को पुनरारंभ करने की आवश्यकता होती है और यदि हम ft_min_word_len बदलते हैं तो हमें इंडेक्स को फिर से बनाने या टेबल की मरम्मत करने की जरूरत है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL अंतराल/लीड फ़ंक्शन?

  2. एसक्यूएल:दो टेबल पर शामिल हों जहां कॉलम शून्य है

  3. एक MySQL क्वेरी के साथ सहायता - समूह-वार अधिकतम एक निश्चित कॉलम रखने वाली पंक्तियां

  4. मूल्य कॉलम के लिए कौन सा MySQL प्रकार सबसे उपयुक्त है?

  5. कौन सा तेज़ है:MySQL/PHP या स्थिर फ़ाइलों से सीधे सेवा करना?