Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fehler bei der MySQL-Volltextsuche

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

Die Volltextsuche braucht etwas Abwechslung, um sich von wiederholtem „Rauschen“ zu befreien. Das Testen mit minimalen Daten führt zu schlechten Ergebnissen. Werfen Sie Ihre ganze Sammlung darauf, damit etwas Bedeutendes herauskommt. Es gibt Einstellungen für die Mindestgröße von Wörtern, nach denen sogar gesucht werden soll, wie in einigen Links unten zu sehen ist.

Stoppwörter

Es gibt MySql Listen von Stoppwörtern in verschiedenen Sprachen, die unbedeutende Wörter darstellen, die während des Suchvorgangs übersprungen wurden. Diese Liste wird in den Server kompiliert, kann aber wie in diesem Manual Page und Text:

Um die standardmäßige Stoppwortliste zu überschreiben, legen Sie die Systemvariable ft_stopword_file fest. (Siehe Abschnitt 5.1.4, „Server-Systemvariablen“.) Der Variablenwert sollte der Pfadname der Datei sein, die die Stoppwortliste enthält, oder die leere Zeichenfolge, um die Stoppwortfilterung zu deaktivieren. Der Server sucht im Datenverzeichnis nach der Datei, es sei denn, es wird ein absoluter Pfadname angegeben, um ein anderes Verzeichnis anzugeben. Nachdem Sie den Wert dieser Variablen oder den Inhalt der Stoppwortdatei geändert haben, starten Sie den Server neu und erstellen Sie Ihre FULLTEXT-Indizes neu.

Einige Beispielabfragen

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

um mehrere übereinstimmende Wörter zu erhalten:

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

Verleiht der relevance ein echtes Gewicht Spalte:

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

Abschnitt mit mehreren Wörtern von hier entfernt . Danke Spencer