sql >> Databasteknik >  >> RDS >> Mysql

mysql fulltextsökning misslyckades

-- drop table testproduct;
CREATE TABLE testproduct
(
    Id                VARCHAR(16),
    prod_name           TEXT,
    ProductIdType     VARCHAR(8),
  PRIMARY KEY (Id),
  FULLTEXT (prod_name)
) ENGINE=MyISAM;

insert into testproduct (id,prod_name,productidtype) values ('B00005N5PF','one pen and a good price for a pen','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('B570J5XS3C',null,'ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C00ZZ5N5PF','let us get rid of some noise','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('D00LL5N5PA','four score and seven years ago our fore...','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('EEEZZ5N5PF','he has a harpoon','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C01ZZ5N5PF','and then we','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('B00ZZ5N5PF','he has a pen in his pocket not a banana','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C02ZZ5N5PF','went to the store','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C03ZZ5N5PF','and decided that we should buy some','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C04ZZ5N5PF','fruit cups or fruit or berries or pebbles','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C037Z5N5PF','then he and her she and it','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('C04K95N5PF','threw some daggers and a harpoon','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('D88895N5PF','more noise and some of this','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('D34595N5PF','this article about harpoons really drills into the throwing of harpoon or harpoons to those that deserve a harpoon','ASIN');
insert into testproduct (id,prod_name,productidtype) values ('D12395N5PF','and there we go','ASIN');

Fulltextsökning behöver lite variation för att bli av med upprepade "brus". Tester med minimal data ger dåliga resultat. Kasta hela din samling på det för att något meningsfullt ska komma ut. Det finns inställningar för minsta storlek på ord som till och med försökt sökas, vilket visas i några länkar nedan.

Stoppord

Det finns MySql listor över stoppord på olika språk som representerar obetydliga ord som hoppades över under sökprocessen. Den listan kompileras till servern, men kan åsidosättas som visas i denna Manuell sida och text:

För att åsidosätta standardstoppordslistan, ställ in systemvariabeln ft_stopword_file. (Se avsnitt 5.1.4, "Serversystemvariabler".) Variabelvärdet ska vara sökvägsnamnet på filen som innehåller stoppordslistan, eller den tomma strängen för att inaktivera stoppordsfiltrering. Servern letar efter filen i datakatalogen om inte ett absolut sökvägsnamn ges för att ange en annan katalog. Efter att ha ändrat värdet på denna variabel eller innehållet i stoppordsfilen, starta om servern och bygg om dina FULLTEXT-index.

Några exempelfrågor

-- select * from testproduct
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('score' IN BOOLEAN MODE);
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('harpoon' IN BOOLEAN MODE);
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('banana' IN BOOLEAN MODE);
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('years' IN BOOLEAN MODE);

för att få flera ord som matchar:

SELECT id,prod_name, match( prod_name )
AGAINST ( '+harpoon +article' IN BOOLEAN MODE ) AS relevance
FROM testproduct 
ORDER BY relevance DESC

Ger en verklig vikt i relevance kolumn:

SELECT id,prod_name, match( prod_name )
AGAINST ( '+harpoon +article' IN NATURAL LANGUAGE MODE) AS relevance
FROM testproduct 
ORDER BY relevance DESC
+------------+--------------------------------------------------------------------------------------------------------------------+--------------------+
| id         | prod_name                                                                                                          | relevance          |
+------------+--------------------------------------------------------------------------------------------------------------------+--------------------+
| D34595N5PF | this article about harpoons really drills into the throwing of harpoon or harpoons to those that deserve a harpoon | 3.6207125186920166 |
| EEEZZ5N5PF | he has a harpoon                                                                                                   | 1.2845110893249512 |
| C04K95N5PF | threw some daggers and a harpoon                                                                                   | 1.2559525966644287 |
|------------+--------------------------------------------------------------------------------------------------------------------+--------------------+

Lyftade avsnittet med flera ord från här . Tack spencer




  1. Hur kan jag upptäcka att en skapa-, uppdaterings-, raderingsfråga lyckades i Codeigniter

  2. Hur man optimerar MySQL-prestanda med MySQLTuner

  3. Hur implementeras Oracles JDBC-frågetidsgräns?

  4. Hur man ändrar sekunder till ett tidsvärde i MySQL