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

mysql fuldtekstsøgning mislykkedes

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

Fuld tekstsøgning kræver en vis variation for at slippe af med gentagen "støj". Test med minimale data vil give dårlige resultater. Kast hele din samling på det, så der kommer noget meningsfuldt ud. Der er indstillinger for minimumsstørrelsen på ord, selv forsøgte at blive søgt efter, som vist i nogle links nedenfor.

Stop-ord

Der er MySql lister over stopord på forskellige sprog, der repræsenterer ubetydelige ord, der er sprunget over under søgeprocessen. Denne liste er kompileret på serveren, men kan tilsidesættes som det ses i denne Manualside og tekst:

For at tilsidesætte standardstopordslisten skal du indstille systemvariablen ft_stopword_file. (Se afsnit 5.1.4, "Serversystemvariabler".) Variabelværdien skal være stinavnet på filen, der indeholder stopordslisten, eller den tomme streng for at deaktivere stopordsfiltrering. Serveren leder efter filen i databiblioteket, medmindre der gives et absolut stinavn for at angive en anden mappe. Efter at have ændret værdien af ​​denne variabel eller indholdet af stopordsfilen, genstart serveren og genopbygg dine FULLTEXT-indekser.

Nogle prøveforespørgsler

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

for at få flere ord, der matcher:

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

Giver en reel vægt i relevance kolonne:

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

Løftede sektionen med flere ord fra her . Tak, Spencer




  1. Hvordan finder jeg dublerede værdier i en tabel i Oracle?

  2. Sådan opdateres materialiseret visning i oracle

  3. SELECT-forespørgsel med CASE-betingelse og SUM()

  4. oracle-tabel eller -visning eksisterer ikke inde fra den lagrede procedure