मैं समस्या और समाधान ढूंढ़ने में सक्षम था।
पूर्ण पाठ खोज सेटिंग अच्छी थी क्योंकि मैं ऑल्ट ईस्ट 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
बदलते हैं तो हमें इंडेक्स को फिर से बनाने या टेबल की मरम्मत करने की जरूरत है।