sql >> Databasteknik >  >> RDS >> Mysql

mysql ft_min_word_len ändring på ubuntu fungerar inte

Jag kunde hitta problemet och åtgärden.

Inställningen för fulltextsökning var bra eftersom jag ville söka med alt east 2 ord och jag hade ft_min_word_len = 2

Nu när jag testade mer upptäckte jag att det slumpmässigt söker efter några ord med två tecken och ignorerar andra.

Här är ett exempel

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)

Men följande fungerar

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

Så det är något annat och uppenbarligen hittade det ft_stopword_file som har en lista med ord och inte gör någonting om någon sökning sker med ett av dem.

Listan finns här http://dev.mysql.com /doc/refman/5.1/en/fulltext-stopwords.html

Så i det här fallet att tillåta alla ordsökningar med en längd på minst 2 tecken

  • Ställ in ft_min_word_len till 2
  • Lägg sedan till ft_stopword_file='path/to/stopword_file.txt' i mysql-konfigurationsfilen för debian /etc/mysql/my.cnf
  • Vi kan lämna den här filen tom om det behövs.

Åh en sak till när vi väl har gjort ovanstående inställningar måste vi starta om mysql och om vi ändrar ft_min_word_len då måste vi bygga om indexet eller reparera tabellen.




  1. Eko/retur lägger till blanksteg före variabel

  2. MySQL-tabell PRIMÄR NYCKELfråga?

  3. SQL Server:Hämta tabell primärnyckel med SQL-fråga

  4. Hur får jag SQLSRV-tillägget att fungera med PHP, eftersom MSSQL är utfasat?