sql >> Database >  >> RDS >> Mysql

mysql ft_min_word_len verandering op ubuntu werkt niet

Ik heb het probleem en de oplossing kunnen vinden.

De instelling voor zoeken in volledige tekst was goed omdat ik wilde zoeken met alt east 2 woorden en ik had ft_min_word_len = 2

Nu ik meer aan het testen was, ontdekte ik dat het willekeurig naar enkele woorden van 2 tekens zoekt en andere negeert.

Hier is een voorbeeld

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)

Maar het volgende werkt

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

Dus het is iets anders en blijkbaar vond het de ft_stopword_file die een lijst met woorden heeft en niets doet als er met een van de woorden wordt gezocht.

De lijst is hier http://dev.mysql.com /doc/refman/5.1/en/fulltext-stopwords.html

Dus in dit geval elke woordzoekopdracht met een lengte van ten minste 2 tekens toestaan

  • Stel de ft_min_word_len in op 2
  • Voeg vervolgens in het mysql-configuratiebestand voor debian /etc/mysql/my.cnf ft_stopword_file='path/to/stopword_file.txt' toe
  • We kunnen dit bestand indien nodig leeg laten.

Oh nog iets als we de bovenstaande instellingen hebben gedaan, moeten we mysql opnieuw opstarten en als we ft_min_word_len veranderen dan moeten we de index opnieuw opbouwen of de tabel repareren.




  1. SQL-injectie-aanvallen voorkomen met Python

  2. wat is de alternatieve functie mysql_list_tables() in php 5

  3. Implementatie van SQL Server-prestatie-indicator voor query's, opgeslagen procedures en triggers

  4. Gebruikersaccountbeheer, rollen, machtigingen, authenticatie PHP en MySQL - Deel 6