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

Jak działa funkcja MATCH() w MySQL

W MySQL funkcja MATCH() funkcja wykonuje wyszukiwanie pełnotekstowe. Akceptuje listę oddzielonych przecinkami kolumn tabeli do przeszukania.

Tabele muszą mieć FULLTEXT indeksu, zanim będzie można przeprowadzić wyszukiwanie pełnotekstowe względem nich (chociaż zapytania logiczne dotyczące MyISAM indeks wyszukiwania może działać — choć powoli — nawet bez FULLTEXT indeks).

Możesz utworzyć FULLTEXT indeks podczas tworzenia tabeli (za pomocą CREATE TABLE oświadczenie) lub możesz użyć ALTER TABLE oświadczenie lub CREATE INDEX oświadczenie, jeśli tabela już istnieje.

Domyślnie w wyszukiwaniu nie jest rozróżniana wielkość liter. Aby przeprowadzić wyszukiwanie z uwzględnieniem wielkości liter, użyj sortowania z uwzględnieniem wielkości liter lub binarnego dla indeksowanych kolumn.

Składnia

Składnia MATCH() funkcja wygląda tak:

MATCH (col1,col2,...) AGAINST (expr [search_modifier])

Gdzie col1,col2,... to oddzielona przecinkami lista kolumn do przeszukania, a expr jest ciągiem wejściowym/wyrażeniem.

Opcjonalny modyfikator_wyszukiwania argument pozwala określić typ wyszukiwania. Może to być dowolna z następujących wartości:

  • W TRYBIE JĘZYKA NATURALNEGO
  • W TRYBIE JĘZYKA NATURALNEGO Z ROZSZERZENIEM ZAPYTANIA
  • W TRYBIE BOOLEAN
  • Z ROZSZERZENIEM ZAPYTANIA

Domyślnym trybem jest W TRYBIE JĘZYKA NATURALNEGO .

Przykład 1 – Podstawowe użycie

Oto przykład korzystania z tej funkcji:

SELECT AlbumId, AlbumName
FROM Albums
WHERE MATCH(AlbumName) AGAINST('cool');

Wynik:

+---------+--------------------+
| AlbumId | AlbumName          |
+---------+--------------------+
|       5 | Casualties of Cool |
+---------+--------------------+

Oto pełna tabela, dla której uruchomiono powyższe zapytanie:

SELECT AlbumId, AlbumName
FROM Albums;

Wynik:

+---------+--------------------------+
| AlbumId | AlbumName                |
+---------+--------------------------+
|       1 | Powerslave               |
|       2 | Powerage                 |
|       3 | Singing Down the Lane    |
|       4 | Ziltoid the Omniscient   |
|       5 | Casualties of Cool       |
|       6 | Epicloud                 |
|       7 | Somewhere in Time        |
|       8 | Piece of Mind            |
|       9 | Killers                  |
|      10 | No Prayer for the Dying  |
|      11 | No Sound Without Silence |
|      12 | Big Swing Face           |
|      13 | Blue Night               |
|      14 | Eternity                 |
|      15 | Scandinavia              |
|      16 | Long Lost Suitcase       |
|      17 | Praise and Blame         |
|      18 | Along Came Jones         |
|      19 | All Night Wrong          |
|      20 | The Sixteen Men of Tain  |
+---------+--------------------------+

Przykład 2 – Błąd:„Nie można znaleźć indeksu PEŁNOTEKSTOWEGO”

InnoDB tabele muszą mieć FULLTEXT indeks, zanim zwróci wyniki wyszukiwania pełnotekstowego. Jeśli nie ma PEŁNEGO TEKSTU indeks, prawdopodobnie otrzymasz następujący błąd:

ERROR 1191 (HY000): Can't find FULLTEXT index matching the column list

Jeśli pojawi się ten błąd, musisz dodać FULLTEXT indeks dla wszystkich kolumn, które próbujesz przeszukać (patrz następny przykład).

Wyjątkiem może być sytuacja, gdy uruchamiasz zapytanie logiczne w MyISAM indeks wyszukiwania.

Mówiąc dokładniej, dokumentacja MySQL dotycząca pełnotekstowego wyszukiwania logicznego stwierdza, co następuje:

InnoDB tabele wymagają FULLTEXT indeks we wszystkich kolumnach MATCH() wyrażenie do wykonywania zapytań logicznych. Zapytania logiczne do MyISAM indeks wyszukiwania może działać nawet bez FULLTEXT indeks, chociaż wyszukiwanie przeprowadzone w ten sposób byłoby dość powolne.

Przykład 3 – Dodawanie indeksu PEŁNOTEKSTOWEGO do istniejącej tabeli

Oto przykład dodawania FULLTEXT indeks do istniejącej tabeli:

ALTER TABLE Albums  
ADD FULLTEXT(AlbumName);

W tym przypadku zindeksowałem zawartość AlbumName kolumna.

Aby zindeksować wiele kolumn, oddziel je przecinkami (patrz następny przykład).

Przykład 4 – Przeszukiwanie wielu kolumn

Jeśli uważasz, że musisz przeszukać więcej niż jedną kolumnę, musisz utworzyć indeks, który zawiera wszystkie przeszukiwane kolumny. Aby to zrobić, po prostu uwzględnij każdą kolumnę jako listę oddzieloną przecinkami.

Oto przykład, w którym dodaję FULLTEXT indeks do filmu tabela (która jest częścią przykładowej bazy danych Sakila).

ALTER TABLE film 
ADD FULLTEXT(title, description);

W tym przypadku indeksuję zawartość tytułu i opis kolumny.

Teraz, gdy stworzyliśmy FULLTEXT indeks dla obu kolumn, możemy przeprowadzić wyszukiwanie pełnotekstowe względem nich:

SELECT title, description
FROM film
WHERE MATCH(title, description) AGAINST('vertigo');

Wynik:

+-------------------+-----------------------------------------------------------------------------------------------------------+
| title             | description                                                                                               |
+-------------------+-----------------------------------------------------------------------------------------------------------+
| VERTIGO NORTHWEST | A Unbelieveable Display of a Mad Scientist And a Mad Scientist who must Outgun a Mad Cow in Ancient Japan |
+-------------------+-----------------------------------------------------------------------------------------------------------+

Oto inne wyszukiwanie, w którym dokładna fraza kluczowa nie pasuje, ale każde słowo kluczowe w tej frazie:

SELECT title, description
FROM film
WHERE MATCH(title, description) AGAINST('Iron Maiden');

Wynik:

+-------------+---------------------------------------------------------------------------------------------------------+
| title       | description                                                                                             |
+-------------+---------------------------------------------------------------------------------------------------------+
| IRON MOON   | A Fast-Paced Documentary of a Mad Cow And a Boy who must Pursue a Dentist in A Baloon                   |
| MAIDEN HOME | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention |
+-------------+---------------------------------------------------------------------------------------------------------+

Jeśli chcesz, aby pasowała tylko dokładna fraza, umieść wokół niej podwójne cudzysłowy:

SELECT title, description
FROM film
WHERE MATCH(title, description) AGAINST('"Iron Maiden"');

Wynik:

Empty set (0.00 sec)

W takim przypadku żadna z kolumn nie zawiera dokładnie tego wyrażenia.

Przykład 5 – Zwróć wynik trafności

Za każdym razem, gdy używasz MATCH() funkcji, każdemu wierszowi w tabeli przypisywana jest wartość istotności. Innymi słowy, każdy wiersz otrzymuje wynik, który określa, jak trafny jest dla wyszukiwanego hasła. Wyniki są następnie uporządkowane według trafności (najpierw najważniejsza).

Wartości trafności to nieujemne liczby zmiennoprzecinkowe. Zero trafności oznacza brak podobieństwa. Trafność jest obliczana na podstawie liczby słów w wierszu (dokument), liczby unikalnych słów w wierszu, całkowitej liczby słów w kolekcji oraz liczby wierszy zawierających dane słowo.

Aby zwrócić trafność każdego wyniku, po prostu dołącz MATCH() funkcji na liście kolumn do wybrania.

Przykład:

SELECT 
  MATCH(title, description) AGAINST('Iron Maiden') AS Relevance,
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('Iron Maiden');

Wynik:

+-----------+-------------+---------------------------------------------------------------------------------------------------------+
| Relevance | title       | description                                                                                             |
+-----------+-------------+---------------------------------------------------------------------------------------------------------+
|         9 | IRON MOON   | A Fast-Paced Documentary of a Mad Cow And a Boy who must Pursue a Dentist in A Baloon                   |
|         9 | MAIDEN HOME | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention |
+-----------+-------------+---------------------------------------------------------------------------------------------------------+

W tym przypadku wynik trafności jest bardzo wysoki dla obu wierszy.

Oto kolejny, w którym trafność jest mniejsza:

SELECT 
  MATCH(title, description) AGAINST('Saga of a Moose') AS Relevance,
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('Saga of a Moose')
LIMIT 15;

Wynik:

+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+
| Relevance          | title                  | description                                                                                             |
+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+
| 2.4431142807006836 | CAPER MOTIONS          | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MySQL Convention                       |
| 2.4431142807006836 | DATE SPEED             | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MySQL Convention             |
| 2.4431142807006836 | DELIVERANCE MULHOLLAND | A Astounding Saga of a Monkey And a Moose who must Conquer a Butler in A Shark Tank                     |
| 2.4431142807006836 | FLASH WARS             | A Astounding Saga of a Moose And a Pastry Chef who must Chase a Student in The Gulf of Mexico           |
| 2.4431142807006836 | HAROLD FRENCH          | A Stunning Saga of a Sumo Wrestler And a Student who must Outrace a Moose in The Sahara Desert          |
| 2.4431142807006836 | MAIDEN HOME            | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention |
| 2.4431142807006836 | SHANE DARKNESS         | A Action-Packed Saga of a Moose And a Lumberjack who must Find a Woman in Berlin                        |
| 2.4431142807006836 | SLEEPLESS MONSOON      | A Amazing Saga of a Moose And a Pastry Chef who must Escape a Butler in Australia                       |
| 2.4431142807006836 | WAKE JAWS              | A Beautiful Saga of a Feminist And a Composer who must Challenge a Moose in Berlin                      |
| 2.4431142807006836 | WONKA SEA              | A Brilliant Saga of a Boat And a Mad Scientist who must Meet a Moose in Ancient India                   |
| 1.2399028539657593 | AIRPLANE SIERRA        | A Touching Saga of a Hunter And a Butler who must Discover a Butler in A Jet Boat                       |
| 1.2399028539657593 | ALASKA PHANTOM         | A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia                      |
| 1.2399028539657593 | ARMY FLINTSTONES       | A Boring Saga of a Database Administrator And a Womanizer who must Battle a Waitress in Nigeria         |
| 1.2399028539657593 | BEAR GRACELAND         | A Astounding Saga of a Dog And a Boy who must Kill a Teacher in The First Manned Space Station          |
| 1.2399028539657593 | BERETS AGENT           | A Taut Saga of a Crocodile And a Boy who must Overcome a Technical Writer in Ancient China              |
+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+

Zauważ, że zestaw wyników byłby znacznie większy, gdybym nie użył LIMIT 15 aby ograniczyć liczbę wyników do 15.

Przykład 6 – zwraca tylko wyniki powyżej określonego wyniku trafności

Możemy pójść o krok dalej w poprzednim przykładzie i odfiltrować tylko te wyniki, które mają określony wynik trafności. W tym przypadku określam, że wynik trafności musi być wyższy niż 2.

Bądź jednak ostrożny, kiedy to robisz. Jak widać powyżej, wartości trafności mogą być bardzo wysokie lub bardzo niskie, w zależności od czynników, takich jak ilość tekstu w kolumnie, liczba innych wierszy pasujących do wyszukiwanego hasła itp.

SELECT 
  MATCH(title, description) AGAINST('Saga of a Moose') AS Relevance,
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('Saga of a Moose') > 2;

Wynik:

+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+
| Relevance          | title                  | description                                                                                             |
+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+
| 2.4431142807006836 | CAPER MOTIONS          | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MySQL Convention                       |
| 2.4431142807006836 | DATE SPEED             | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MySQL Convention             |
| 2.4431142807006836 | DELIVERANCE MULHOLLAND | A Astounding Saga of a Monkey And a Moose who must Conquer a Butler in A Shark Tank                     |
| 2.4431142807006836 | FLASH WARS             | A Astounding Saga of a Moose And a Pastry Chef who must Chase a Student in The Gulf of Mexico           |
| 2.4431142807006836 | HAROLD FRENCH          | A Stunning Saga of a Sumo Wrestler And a Student who must Outrace a Moose in The Sahara Desert          |
| 2.4431142807006836 | MAIDEN HOME            | A Lacklusture Saga of a Moose And a Teacher who must Kill a Forensic Psychologist in A MySQL Convention |
| 2.4431142807006836 | SHANE DARKNESS         | A Action-Packed Saga of a Moose And a Lumberjack who must Find a Woman in Berlin                        |
| 2.4431142807006836 | SLEEPLESS MONSOON      | A Amazing Saga of a Moose And a Pastry Chef who must Escape a Butler in Australia                       |
| 2.4431142807006836 | WAKE JAWS              | A Beautiful Saga of a Feminist And a Composer who must Challenge a Moose in Berlin                      |
| 2.4431142807006836 | WONKA SEA              | A Brilliant Saga of a Boat And a Mad Scientist who must Meet a Moose in Ancient India                   |
+--------------------+------------------------+---------------------------------------------------------------------------------------------------------+

Przykład 7 – Uwzględnij wyniki o zerowej trafności

Oto przykład listy wartości trafności dla każdego wiersza, nawet jeśli wartość trafności wynosi zero. Możemy to zrobić, nie używając funkcji MATCH() funkcja w GDZIE klauzula.

W tym przykładzie nie używam w rzeczywistości WHERE klauzula. Używam tylko LIMIT klauzula ograniczająca liczbę wyników.

SELECT 
  MATCH(title, description) AGAINST('Scientist') AS Relevance,
  title, 
  description
FROM film
LIMIT 15;

Wynik:

+-------------------+------------------+-----------------------------------------------------------------------------------------------------------------------+
| Relevance         | title            | description                                                                                                           |
+-------------------+------------------+-----------------------------------------------------------------------------------------------------------------------+
| 1.026631474494934 | ACADEMY DINOSAUR | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies                      |
|                 0 | ACE GOLDFINGER   | A Astounding Epistle of a Database Administrator And a Explorer who must Find a Car in Ancient China                  |
|                 0 | ADAPTATION HOLES | A Astounding Reflection of a Lumberjack And a Car who must Sink a Lumberjack in A Baloon Factory                      |
|                 0 | AFFAIR PREJUDICE | A Fanciful Documentary of a Frisbee And a Lumberjack who must Chase a Monkey in A Shark Tank                          |
|                 0 | AFRICAN EGG      | A Fast-Paced Documentary of a Pastry Chef And a Dentist who must Pursue a Forensic Psychologist in The Gulf of Mexico |
|                 0 | AGENT TRUMAN     | A Intrepid Panorama of a Robot And a Boy who must Escape a Sumo Wrestler in Ancient China                             |
|                 0 | AIRPLANE SIERRA  | A Touching Saga of a Hunter And a Butler who must Discover a Butler in A Jet Boat                                     |
|                 0 | AIRPORT POLLOCK  | A Epic Tale of a Moose And a Girl who must Confront a Monkey in Ancient India                                         |
| 2.053262948989868 | ALABAMA DEVIL    | A Thoughtful Panorama of a Database Administrator And a Mad Scientist who must Outgun a Mad Scientist in A Jet Boat   |
|                 0 | ALADDIN CALENDAR | A Action-Packed Tale of a Man And a Lumberjack who must Reach a Feminist in Ancient China                             |
|                 0 | ALAMO VIDEOTAPE  | A Boring Epistle of a Butler And a Cat who must Fight a Pastry Chef in A MySQL Convention                             |
|                 0 | ALASKA PHANTOM   | A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia                                    |
|                 0 | ALI FOREVER      | A Action-Packed Drama of a Dentist And a Crocodile who must Battle a Feminist in The Canadian Rockies                 |
|                 0 | ALICE FANTASIA   | A Emotional Drama of a A Shark And a Database Administrator who must Vanquish a Pioneer in Soviet Georgia             |
| 1.026631474494934 | ALIEN CENTER     | A Brilliant Drama of a Cat And a Mad Scientist who must Battle a Feminist in A MySQL Convention                       |
+-------------------+------------------+-----------------------------------------------------------------------------------------------------------------------+

Przykład 8 – Tryb logiczny

MySQL pozwala nam na wyszukiwanie pełnotekstowe w trybie logicznym. Aby to zrobić, dodaj W TRYBIE BOOLEAN modyfikator do zapytania.

Tryb logiczny pozwala na użycie operatorów takich jak + i - aby określić, czy określone słowo lub wyrażenie musi być obecne, czy nie.

W poniższym przykładzie poprzedzam każde słowo znakiem plus (+ ), aby wskazać, że oba słowa muszą być obecne.

SELECT 
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('+Saga +Moose' IN BOOLEAN MODE)
LIMIT 3;

Wynik:

+------------------------+---------------------------------------------------------------------------------------------+
| title                  | description                                                                                 |
+------------------------+---------------------------------------------------------------------------------------------+
| CAPER MOTIONS          | A Fateful Saga of a Moose And a Car who must Pursue a Woman in A MySQL Convention           |
| DATE SPEED             | A Touching Saga of a Composer And a Moose who must Discover a Dentist in A MySQL Convention |
| DELIVERANCE MULHOLLAND | A Astounding Saga of a Monkey And a Moose who must Conquer a Butler in A Shark Tank         |
+------------------------+---------------------------------------------------------------------------------------------+

W następnym przykładzie zmieniam jeden ze znaków plus na znak minus (- ). Oznacza to, że tylko te wiersze, które zawierają słowo Saga zostaną zwrócone, ale tylko wtedy, gdy nie zawierają również łosia :

SELECT 
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('+Saga -Moose' IN BOOLEAN MODE)
LIMIT 3;

Wynik:

+------------------+-------------------------------------------------------------------------------------------------+
| title            | description                                                                                     |
+------------------+-------------------------------------------------------------------------------------------------+
| AIRPLANE SIERRA  | A Touching Saga of a Hunter And a Butler who must Discover a Butler in A Jet Boat               |
| ALASKA PHANTOM   | A Fanciful Saga of a Hunter And a Pastry Chef who must Vanquish a Boy in Australia              |
| ARMY FLINTSTONES | A Boring Saga of a Database Administrator And a Womanizer who must Battle a Waitress in Nigeria |
+------------------+-------------------------------------------------------------------------------------------------+

Znak minus służy do wykluczenia wyników, które w przeciwnym razie zostałyby zwrócone. Dlatego też, jeśli wszystkie nasze wyszukiwane słowa są poprzedzone znakiem minus, zwracany jest pusty zestaw.

SELECT 
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('-Saga -Moose' IN BOOLEAN MODE)
LIMIT 3;

Wynik:

Empty set (0.00 sec)

Istnieje wiele innych operatorów, których można używać w wyszukiwaniach logicznych, takich jak ~ , < , > , * , i więcej. Aby uzyskać bardziej szczegółowe informacje na temat korzystania z trybu logicznego, zapoznaj się z dokumentacją MySQL dotyczącą Boolean Full-Text Searches.

Przykład 9 – z rozszerzeniem ślepych zapytań

Możesz użyć Z ROZSZERZENIEM ZAPYTANIA lub W TRYBIE JĘZYKA NATURALNEGO Z ROZSZERZENIEM ZAPYTANIA modyfikatory do wykonywania ślepego rozszerzania zapytań. Może to być przydatne, gdy wyszukiwana fraza jest bardzo krótka, a zwracane wyniki mogą być zbyt wąskie (co wyklucza potencjalnie istotne dokumenty).

Rozszerzanie zapytań może rozszerzyć wyszukiwanie, zwracając wiersze, które w innym przypadku nie zostałyby zwrócone. W szczególności, jeśli niezgodny wiersz zawiera słowa, które są również zawarte w pasującym wierszu, ten niezgodny wiersz może stać się wierszem pasującym. Innymi słowy, niezgodny wiersz nadal może zostać zwrócony, po prostu dlatego, że współdzieli inne słowa z pasującym wierszem.

Aby zademonstrować, oto normalne wyszukiwanie bez rozszerzenie zapytania:

SELECT AlbumId, AlbumName
FROM Albums
WHERE MATCH(AlbumName) AGAINST('Blue' IN NATURAL LANGUAGE MODE);

Wynik:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|      13 | Blue Night |
+---------+------------+

Ja wyraźnie stwierdziłem W TRYBIE JĘZYKA NATURALNEGO ale jest to tryb domyślny, więc mógłbym również pominąć ten modyfikator, gdybym tak zdecydował.

A oto to samo wyszukiwanie z rozszerzenie zapytania:

SELECT AlbumId, AlbumName
FROM Albums
WHERE MATCH(AlbumName) AGAINST('Blue' WITH QUERY EXPANSION);

Wynik:

+---------+-----------------+
| AlbumId | AlbumName       |
+---------+-----------------+
|      13 | Blue Night      |
|      19 | All Night Wrong |
+---------+-----------------+

W takim przypadku zwracane są dwa wyniki. Zwróć uwagę, że drugi wynik nie zawiera wyszukiwanej frazy (niebieski ). Ale zawiera słowo Noc co zdarza się również w pierwszym wyniku. Tak więc rozszerzone zapytanie uważa, że ​​jest wystarczająco dobre, aby pasowało.

Nazwy albumów prawdopodobnie nie są zbyt dobrym przypadkiem użycia trybu rozszerzania zapytań. Lepszym przypadkiem użycia może być wyszukiwanie powiedzmy baza danych , gdzie rozszerzone zapytanie może również zwrócić dokumenty zawierające nazwy takie jak MySQL , Wyrocznia itp., nawet jeśli nie zawierają wyrażenia baza danych .

Oto kolejny przykład. Jednak ten przykład używa podwójnych cudzysłowów, aby określić, że cały wyszukiwany termin powinien być obecny.

Jeśli wykonamy wyszukiwanie bez rozszerzenie zapytania:

SELECT 
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('"Feminist And a Mad Scientist"')
LIMIT 3;

Wynik:

+------------------+--------------------------------------------------------------------------------------------------+
| title            | description                                                                                      |
+------------------+--------------------------------------------------------------------------------------------------+
| ACADEMY DINOSAUR | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies |
+------------------+--------------------------------------------------------------------------------------------------+

Zwracany jest tylko jeden wynik (jest to jedyny wynik, który zawiera całą frazę, dokładnie tak, jak została wpisana).

Ale jeśli użyjemy ślepego rozszerzania zapytań, oto co się dzieje:

SELECT 
  title, 
  description
FROM film
WHERE MATCH(title, description) AGAINST('"Feminist And a Mad Scientist"' WITH QUERY EXPANSION)
LIMIT 3;

Wynik:

+--------------------+------------------------------------------------------------------------------------------------------+
| title              | description                                                                                          |
+--------------------+------------------------------------------------------------------------------------------------------+
| ACADEMY DINOSAUR   | A Epic Drama of a Feminist And a Mad Scientist who must Battle a Teacher in The Canadian Rockies     |
| DINOSAUR SECRETARY | A Action-Packed Drama of a Feminist And a Girl who must Reach a Robot in The Canadian Rockies        |
| VICTORY ACADEMY    | A Insightful Epistle of a Mad Scientist And a Explorer who must Challenge a Cat in The Sahara Desert |
+--------------------+------------------------------------------------------------------------------------------------------+

Pierwszy wiersz jest taki sam, jak wtedy, gdy nie używaliśmy rozszerzania zapytań. Jednak zapytanie następnie przechodzi i zwraca wiersze zawierające tylko części wyszukiwanego hasła. Ten wynik jest ograniczony tylko do trzech, ponieważ użyłem LIMIT 3 . Rzeczywiste wyniki są znacznie lepsze:

SELECT COUNT(*)
FROM film
WHERE MATCH(title, description) AGAINST('"Feminist And a Mad Scientist"' WITH QUERY EXPANSION);

Wynik:

+----------+
| COUNT(*) |
+----------+
|     1000 |
+----------+

Całkiem możliwe, że wiele z tych wyników jest całkowicie nieistotnych dla wyszukiwanego hasła. Dlatego ślepe rozszerzanie zapytań zwykle działa najlepiej w przypadku krótszych wyszukiwanych haseł.

Więcej informacji na temat używania ślepego rozszerzania zapytań można znaleźć w dokumentacji MySQL:Wyszukiwanie pełnotekstowe z rozszerzaniem zapytań.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Praca z kursorami SQL

  2. Jak dodać domyślne ograniczenie w MySQL?

  3. Jak utworzyć nowego użytkownika i przyznać uprawnienia w MySQL

  4. Zgłosić błąd uniemożliwiający aktualizację tabeli w wyzwalaczu MySQL

  5. Python SQL — jak korzystać z baz danych SQLite, MySQL i PostgreSQL w Pythonie