sql >> Database teknologi >  >> RDS >> Mysql

mysql ft_min_word_len ændring på ubuntu virker ikke

Jeg var i stand til at finde problemet og løsningen.

Indstillingen for fuld tekstsøgning var god, da jeg ville søge med alt øst 2 ord, og jeg havde ft_min_word_len = 2

Mens jeg nu testede mere, fandt jeg ud af, at det tilfældigt søger efter få 2-tegnsord og ignorerer andre.

Her er et eksempel

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ølgende virker

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 er noget andet og fandt tilsyneladende det ft_stopword_file som har en liste med ord og ikke gør noget, hvis der sker en søgning med et af dem.

Listen er her http://dev.mysql.com /doc/refman/5.1/da/fulltext-stopwords.html

Så i dette tilfælde at tillade enhver ordsøgning med en længde på mindst 2 tegn

  • Indstil ft_min_word_len til 2
  • Så tilføj ft_stopword_file='path/to/stopword_file.txt' i mysql-konfigurationsfilen for debian /etc/mysql/my.cnf
  • Vi kan lade denne fil være tom, hvis det er nødvendigt.

Åh en ting mere, når vi har gjort ovenstående indstillinger, skal vi genstarte mysql, og hvis vi ændrer ft_min_word_len så skal vi genopbygge indekset eller reparere bordet.




  1. Dynamisk markør i lagret procedure

  2. Venstre ydre led fungerer som indre led

  3. Indsæt flere elementer i et ID MySQL fra afkrydsningsfeltet input PHP-formular

  4. hvordan man får forskellige rækker med max værdi