|
|
Справочное руководство по MySQL6.8 Полнотекстовый поиск в MySQL
6.8 Полнотекстовый поиск в MySQL
Что касается MySQL 3.23.23, то эта версия MySQL поддерживает
полнотекстовый поиск и индексацию. Полнотекстовые индексы в MySQL
обозначаются как индексы типа
Полнотекстовый поиск выполняется с помощью функции mysql> CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT (title,body) ); Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO articles VALUES (0,'MySQL Tutorial', 'DBMS stands for DataBase ...'), (0,'How To Use MySQL Efficiently', 'After you went through a ...'), (0,'Optimising MySQL','In this tutorial we will show ...'), (0,'1001 MySQL Trick','1. Never run mysqld as root. 2. ...'), (0,'MySQL vs. YourSQL', 'In the following database comparison ...'), (0,'MySQL Security', 'When configured properly, MySQL ...'); Query OK, 6 rows affected (0.00 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database'); +----+-------------------+------------------------------------------+ | id | title | body | +----+-------------------+------------------------------------------+ | 5 | MySQL vs. YourSQL | In the following database comparison ... | | 1 | MySQL Tutorial | DBMS stands for DataBase ... | +----+-------------------+------------------------------------------+ 2 rows in set (0.00 sec)
Функция
Когда команда Поиск возможен также в логическом режиме, это объясняется ниже в данном разделе.
Предыдущий пример представляет собой общую иллюстрацию использования
функции
В следующем примере показано, как извлекать величины релевантности в явном
виде. В случае отсутствия выражений mysql> SELECT id,MATCH (title,body) AGAINST ('Tutorial') FROM articles; +----+-----------------------------------------+ | id | MATCH (title,body) AGAINST ('Tutorial') | +----+-----------------------------------------+ | 1 | 0.64840710366884 | | 2 | 0 | | 3 | 0.66266459031789 | | 4 | 0 | | 5 | 0 | | 6 | 0 | +----+-----------------------------------------+ 6 rows in set (0.00 sec)
Следующий пример - более сложный. Запрос возвращает значение релевантности
и, кроме того, сортирует строки в порядке убывания релевантности. Чтобы
получить такой результат, необходимо указать mysql> SELECT id, body, MATCH (title,body) AGAINST -> ('Security implications of running MySQL as root') AS score -> FROM articles WHERE MATCH (title,body) AGAINST -> ('Security implications of running MySQL as root'); +----+-------------------------------------+-----------------+ | id | body | score | +----+-------------------------------------+-----------------+ | 4 | 1. Never run mysqld as root. 2. ... | 1.5055546709332 | | 6 | When configured properly, MySQL ... | 1.31140957288 | +----+-------------------------------------+-----------------+ 2 rows in set (0.00 sec) Для разбивки текста на слова MySQL использует очень простой синтаксический анализатор. ``Словом'' является любая последовательность символов, состоящая из букв, чисел, знаков `'' и `_'. Любое ``слово'', присутствующее в стоп-списке (stopword) или просто слишком короткое (3 символа или меньше), игнорируется. Каждое правильное слово в наборе проверяемых текстов и в данном запросе оценивается в соответствии с его важностью в этом запросе или наборе текстов. Таким образом, слово, присутствующее во многих документах, будет иметь меньший вес (и даже, возможно, нулевой), как имеющее более низкое смысловое значение в данном конкретном наборе текстов. С другой стороны, редко встречающееся слово получит более высокий вес. Затем полученные значения весов слов объединяются для вычисления релевантности данной строки столбца. Описанная техника подсчета лучше всего работает для больших наборов текстов (фактически она именно для этого тщательно настраивалась). Для очень малых таблиц распределение слов не отражает адекватно их смысловое значение, и данная модель иногда может выдавать некорректные результаты. mysql> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('MySQL'); Empty set (0.00 sec) Поиск по слову ``MySQL'' в предыдущем примере не приводит к каким-либо результатам, так как это слово присутствует более чем в половине строк. По существу, данное слово целесообразно трактовать как стоп-слово (т.е. слово с нулевой смысловой ценностью). Это наиболее приемлемое решение - запрос на естественном языке не должен возвращать каждую вторую строку из таблицы размером 1Гб. Маловероятно, что слово, встречающееся в половине строк таблицы, определяет местонахождение релевантных документов. На самом деле, наиболее вероятно, что будет найдено много не относящихся к делу документов. Общеизвестно, что такое случается слишком часто при попытке найти что-либо в Интернет с помощью поисковых машин. Именно на этом основании подобным строкам должно быть назначено низкое смысловое значение в данном конкретном наборе данных.
В MySQL 4.0.1 возможен полнотекстовый поиск также и в логическом режиме с
использованием модификатора mysql> SELECT * FROM articles WHERE MATCH (title,body) -> AGAINST ('+MySQL -YourSQL' IN BOOLEAN MODE); +----+------------------------------+-------------------------------------+ | id | title | body | +----+------------------------------+-------------------------------------+ | 1 | MySQL Tutorial | DBMS stands for DataBase ... | | 2 | How To Use MySQL Efficiently | After you went through a ... | | 3 | Optimising MySQL | In this tutorial we will show ... | | 4 | 1001 MySQL Trick | 1. Never run mysqld as root. 2. ... | | 6 | MySQL Security | When configured properly, MySQL ... | +----+------------------------------+-------------------------------------+
Данный запрос вывел все строки, содержащие слово ``MySQL'' (заметьте,
50-процентная пороговая величина здесь не используется), но эти строки не
содержат слова ``YourSQL''. Следует отметить, что логический режим поиска
не сортирует автоматически строки в порядке уменьшения релевантности. Это
видно по результату предыдущего запроса, где строка с наиболее высокой
релевантностью (содержащая слово ``MySQL'' дважды) помещена последней, а
не первой. Логический режим полнотекстового поиска может работать даже без
индекса В логическом режиме полнотекстового поиска поддерживаются следующие операторы:
Ниже приведен ряд примеров:
Главы
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Copyright © 2008-2010 Prime Hosting |
![]() Хостинг Реселлинг хостинга VPS - Хостинг Аренда серверов Dedicated server |