sql >> Databáze >  >> RDS >> Mysql

Selhání fulltextového vyhledávání mysql

-- 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');

Fulltextové vyhledávání potřebuje určitou rozmanitost, aby se zbavilo opakovaného „šumu“. Testování s minimem dat přinese špatné výsledky. Hoďte na to celou svou sbírku, aby se objevilo cokoliv smysluplného. Existují nastavení pro minimální velikost slov, která se dokonce pokusila vyhledat, jak je vidět na některých odkazech níže.

Zastavit slova

Existují MySql Seznamy stop slov v různých jazycích představujících nepodstatná slova vynechaná během procesu vyhledávání. Tento seznam je zkompilován na serveru, ale lze jej přepsat, jak je vidět v tomto Stránka manuálu a text:

Chcete-li přepsat výchozí seznam ignorovaných slov, nastavte systémovou proměnnou ft_stopword_file. (Viz část 5.1.4 – „Systémové proměnné serveru“.) Hodnota proměnné by měla být název cesty k souboru obsahujícímu seznam stopových slov nebo prázdný řetězec pro zakázání filtrování stopslov. Server hledá soubor v datovém adresáři, pokud není zadána absolutní cesta k určení jiného adresáře. Po změně hodnoty této proměnné nebo obsahu souboru ignorovaných slov restartujte server a znovu vytvořte FULLTEXT indexy.

Některé ukázkové dotazy

-- 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);

získat shodu více slov:

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

Přiděluje skutečnou váhu relevance sloupec:

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 |
|------------+--------------------------------------------------------------------------------------------------------------------+--------------------+

Zrušili jsme sekci s více slovy z zde . Díky, spencer




  1. ORA-30926:nelze získat stabilní sadu řádků ve zdrojových tabulkách

  2. Jak odstranit akcenty a všechny znaky <> a..z na serveru SQL?

  3. SQL Buddy – Webový nástroj pro správu MySQL

  4. Jak zřetězit řetězce v SQL