sql >> Database >  >> RDS >> Mysql

mysql fulltext zoeken mislukt

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

Full Text Search heeft wat afwisseling nodig om zich te ontdoen van herhaalde 'ruis'. Testen met minimale gegevens levert slechte resultaten op. Gooi je hele verzameling erin om iets zinnigs uit te brengen. Er zijn instellingen voor de minimale grootte van woorden die zelfs geprobeerd zijn te doorzoeken, zoals te zien is in sommige onderstaande links.

Stop woorden

Er zijn MySql Lijsten met stopwoorden in verschillende talen die onbeduidende woorden vertegenwoordigen die tijdens het zoekproces zijn overgeslagen. Die lijst wordt op de server gecompileerd, maar kan worden overschreven zoals te zien is in deze Handmatige pagina en tekst:

Om de standaard stopwoordenlijst te overschrijven, stelt u de systeemvariabele ft_stopword_file in. (Zie Paragraaf 5.1.4, “Serversysteemvariabelen”.) De variabelewaarde moet de padnaam zijn van het bestand dat de stopwoordenlijst bevat, of de lege tekenreeks om stopwoordfiltering uit te schakelen. De server zoekt naar het bestand in de datadirectory, tenzij een absolute padnaam wordt gegeven om een ​​andere directory op te geven. Nadat u de waarde van deze variabele of de inhoud van het stopwoordbestand hebt gewijzigd, start u de server opnieuw en bouwt u uw FULLTEXT-indexen opnieuw op.

Enkele voorbeeldvragen

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

om meerdere woorden overeen te laten komen:

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

Geeft een echt gewicht aan relevance kolom:

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

De sectie met meerdere woorden verwijderd van hier . Bedankt spencer




  1. De verschillende beperkingen in SQL Server verkennen

  2. Fout bij het installeren van Psycopg2 op MacOS 10.9.5

  3. IF ELSE-instructie gebruiken op basis van Count om verschillende Insert-instructies uit te voeren

  4. GROUPING- en GROUPING_ID-functies in SQL Server begrijpen