Jak MySQL instrukcja mówi:.
zdanie, które jest zamknięte w podwójny cudzysłów („"”) znaków pasuje tylko wiersze zawierające frazę dosłownie, jak to zostało wpisane
Spójrzmy na przykład tabela:
mysql> select * from articles;
+----+-----------------------+------------------------------------------+
| id | title | body |
+----+-----------------------+------------------------------------------+
| 1 | PostgreSQL Tutorial | DBMS stands for DataBase ... |
| 2 | How To Use MySQL Well | After you went through a ... |
| 3 | Optimizing MySQL | In this tutorial we will show ... |
| 4 | 1001 MySQL Tricks | 1. Never run mysqld as root. 2. ... |
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 6 | MySQL Security | When configured properly, MySQL ... |
+----+-----------------------+------------------------------------------+
mysql> SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('"database comparison"' IN BOOLEAN MODE);
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
+----+-------------------+------------------------------------------+
sprawach porządku, gdy słowa są cytowane:
mysql> SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('"comparison database"' IN BOOLEAN MODE);
Empty set (0.01 sec)
Gdy usuwamy cytatów, to będzie szukać wierszy, zawierające słowa "bazy danych" lub "porównania":
mysql> SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('database comparison' IN BOOLEAN MODE);
+----+---------------------+------------------------------------------+
| id | title | body |
+----+---------------------+------------------------------------------+
| 1 | PostgreSQL Tutorial | DBMS stands for DataBase ... |
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
+----+---------------------+------------------------------------------+
kolejność nie ma znaczenia teraz:
mysql> SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('comparison database' IN BOOLEAN MODE);
+----+---------------------+------------------------------------------+
| id | title | body |
+----+---------------------+------------------------------------------+
| 1 | PostgreSQL Tutorial | DBMS stands for DataBase ... |
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
+----+---------------------+------------------------------------------+
Jeśli chcemy uzyskać wiersze zawierające słowo "PostgreSQL" lub wyrażenie "porównanie bazy danych", powinniśmy użyć tego żądania:
mysql> SELECT * FROM articles WHERE MATCH (title,body)
AGAINST ('PostgreSQL "database comparison"' IN BOOLEAN MODE);
+----+---------------------+------------------------------------------+
| id | title | body |
+----+---------------------+------------------------------------------+
| 1 | PostgreSQL Tutorial | DBMS stands for DataBase ... |
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
+----+---------------------+------------------------------------------+
fiddle
Upewnij się, że słowa, szukasz, nie są w list of stopwords, które są ignorowane.
Witam user4035, rozumiem podstawy wyszukiwania pełnotekstowego i jak to działa, moim celem jest uzyskanie wyników, jak w twoim ostatnim przykładzie, ale problem jest, gdy umieszczam ciąg, który zawiera podwójne cudzysłowy przeciwko. Wyniki nie zawierają pełnej frazy, ale słowa w wyrażeniu. – Vasko
@ Vasko To bardzo dziwne, ponieważ dla mnie, kiedy umieszczam słowa w cudzysłowach, MySQL wyszukuje dokładnie frazę, a nie słowa. Skopiuj mój przykładowy stół z skrzypiec i wypróbuj ostatnie zapytanie w twoim systemie. Daj mi znać, jak to działa. – user4035
Użyłem http://sphinxsearch.com/ zamiast wbudowanego wyszukiwania FULLTEXT mySql, a teraz aplikacja jest znacznie bardziej responsywna. I tak dziękuję za szczegółową odpowiedź. – Vasko