Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Błąd wyszukiwania pełnotekstowego 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');

Wyszukiwanie pełnotekstowe wymaga pewnej różnorodności, aby pozbyć się powtarzających się „szumów”. Testowanie z minimalną ilością danych przyniesie słabe wyniki. Rzuć na nią całą swoją kolekcję, aby wyszło coś sensownego. Istnieją ustawienia minimalnego rozmiaru słów, które nawet próbowano przeszukiwać, jak widać w niektórych poniższych linkach.

Zatrzymaj słowa

Istnieje MySql Listy słów zakazujących w różnych językach reprezentujących nieistotne słowa pomijane podczas procesu wyszukiwania. Ta lista jest kompilowana na serwerze, ale można ją zastąpić, jak widać w tym Strona podręcznika i tekst:

Aby zastąpić domyślną listę odrzucanych słów, ustaw zmienną systemową ft_stopword_file. (Patrz Sekcja 5.1.4, „Zmienne systemowe serwera”.) Zmiennavalue powinna być nazwą ścieżki pliku zawierającego listę stopwordlist lub pustym ciągiem, aby wyłączyć filtrowanie stopword. Serwer szuka pliku w katalogu danych, chyba że zostanie podana bezwzględna nazwa ścieżki w celu określenia innego katalogu. Po zmianie wartości tej zmiennej lub zawartości pliku stopword, uruchom ponownie serwer i odbuduj indeksy FULLTEXT.

Niektóre przykładowe zapytania

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

aby uzyskać dopasowanie wielu słów:

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

Daje rzeczywistą wagę w relevance kolumna:

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

Usunięto sekcję wielu słów z tutaj . Dzięki spencer




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TIMESTAMPDIFF() Przykłady – MySQL

  2. Konfiguracja MySQL 8

  3. Odmowa dostępu dla użytkownika „root”@„localhost” podczas próby nadania uprawnień. Jak nadawać uprawnienia?

  4. Przejdź z tradycyjnej replikacji do GTID

  5. Jak wstawić wartości w tabeli z kluczem obcym za pomocą MySQL?