Spec-Zone .ru
спецификации, руководства, описания, API
|
MySQL может выполнить булевы полнотекстовые поискы, используя IN BOOLEAN MODE
модификатор. С этим модификатором у определенных символов есть особое значение вначале или конец слов в строке
поиска. В следующем запросе, +
и -
операторы
указывают, что слово должно присутствовать или отсутствовать, соответственно, для соответствия, чтобы произойти.
Таким образом запрос получает все строки, которые содержат слово "MySQL",
но которые не содержат слово "YourSQL":
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 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. ... || 6 | MySQL Security | When configured properly, MySQL ... |+----+-----------------------+-------------------------------------+
В реализовании этой опции MySQL использует то, что иногда упоминается как подразумеваемая Булева логика, в который
+
стенды для AND
-
стенды для NOT
[никакой оператор] не подразумевает
OR
У булевых полнотекстовых поисков есть эти характеристики:
Они не используют 50%-ый порог, который применяется к MyISAM
поиск индексирует.
Они автоматически не сортируют строки в порядке уменьшающейся уместности.
Булевы запросы против a MyISAM
поиск индексирует,
может работать даже без a FULLTEXT
индексируйте, хотя поиск, выполняемый
этим способом, был бы довольно медленным. InnoDB
таблицы требуют a FULLTEXT
индексируйте на всех столбцах MATCH()
выражение, чтобы выполнить булевы запросы.
Минимальная и максимальная длина слова полнотекстовые параметры применяется: innodb_ft_min_token_size
и innodb_ft_max_token_size
для InnoDB
поиск индексирует, и ft_min_word_len
и ft_max_word_len
для MyISAM
.
Список stopword применяется, управляемый innodb_ft_enable_stopword
, innodb_ft_server_stopword_table
, и innodb_ft_user_stopword_table
для InnoDB
поиск индексирует, и ft_stopword_file
для MyISAM
.
InnoDB
полнотекстовый поиск не поддерживает
использование многократных операторов на единственном слове поиска, как в этом примере: '++apple'.
Использование многократных операторов на единственном слове
поиска возвращает синтаксическую ошибку стандарту. MyISAM полнотекстовый поиск успешно обработает тот же
самый поиск, игнорирующий все операторы за исключением оператора, сразу смежного со словом поиска.
Булева полнотекстовая возможность поиска поддерживает следующие операторы:
+
Ведущий знак "плюс" указывает, что это слово должно присутствовать в каждой строке, которая возвращается.
-
Ведущий знак "минус" указывает, что это слово не должно присутствовать ни в одной из строк, которые возвращаются.
Отметьте: -
оператор действует только, чтобы исключить строки, которые
являются иначе соответствующими другими критериями поиска. Таким образом, поиск булева режима,
который содержит только сроки, которым предшествуют -
возвращает пустой
результат. Это не возвращает "все строки кроме тех, которые содержат любой из исключенных сроков."
(никакой оператор)
По умолчанию (когда ни один +
ни -
определяется), слово является дополнительным, но строки, которые содержат его, оцениваются выше. Это
подражает поведению MATCH()
... AGAINST()
без IN BOOLEAN MODE
модификатор.
@
distance
Этот оператор продолжает работать InnoDB
таблицы только. Это тестирует,
начинают ли два или больше слова все в пределах указанного расстояния друг от друга, измеренного в
словах. Определите слова поиска в пределах двойным образом заключенной в кавычки строки сразу перед
@
оператор, например,
distance
MATCH(col1) AGAINST('"word1 word2 word3" @8' IN BOOLEAN MODE)
> <
Эти два оператора используются, чтобы изменить содействие слова значению уместности, которое
присваивается строке. >
оператор увеличивает содействие и <
оператор уменьшает это. См., что пример следует за этим списком.
( )
Групповые слова круглых скобок в подвыражения. Могут быть вложены заключенные в скобки группы.
~
Ведущая тильда действует как оператор отрицания, вызывая содействие слова уместности строки быть
отрицательной. Это полезно для отмечания "шумовых" слов. Строка, содержащая такое слово,
оценивается ниже чем другие, но не исключается в целом, как это было бы с -
оператор.
*
Звездочка служит усечением (или подстановочный знак) оператор. В отличие от других операторов, это
добавляется к слову, которое будет влияться. Слова
соответствуют, если они начинают со слова, предшествующего *
оператор.
Если слово определяется с оператором усечения, оно не разделяется от булева запроса, даже если это
слишком коротко или stopword. Слишком коротко ли слово, определяется от innodb_ft_min_token_size
установка для InnoDB
таблицы, или ft_min_word_len
для MyISAM
таблицы.
wildcarded слово рассматривают как префикс, который должен присутствовать в начале одного или более
слов. Если минимальная длина слова 4, поиск '+
мог возвратить меньше строк чем поиск word
+the*''+
, потому что второй запрос игнорирует
также короткий критерий поиска word
+the'the
.
"
Фраза, которая включается в пределах двойной кавычки (""
") символы соответствуют только строки, которые
содержат фразу буквально, поскольку она была введена.
Полнотекстовый механизм разделяет фразу на слова и выполняет поиск в FULLTEXT
индексируйте для слов. Символы неслова не должны быть
соответствующими точно: поиск Фразы требует только, чтобы соответствия содержали точно те же самые
слова как фраза и в том же самом порядке. Например, "test
phrase"
соответствия "test, phrase"
.
Если фраза не содержит слов, которые находятся в индексировании, результат пуст. Слова не могли бы быть в индексировании из-за комбинации факторов: если они не существуют в тексте, являются stopwords, или короче чем минимальная длина индексированных слов.
Следующие примеры демонстрируют некоторые строки поиска, которые используют булевы полнотекстовые операторы:
'apple banana'
Найдите строки, которые содержат по крайней мере одно из этих двух слов.
'+apple +juice'
Найдите строки, которые содержат оба слова.
'+apple macintosh'
Найдите строки, которые содержат слово "яблоко", но строки разряда выше, если они также содержат "макинтош".
'+apple -macintosh'
Найдите строки, которые содержат слово "яблоко", но не "макинтош".
'+apple ~macintosh'
Найдите строки, которые содержат слово "яблоко", но если строка также содержит слово "макинтош", оцените это ниже, чем если
бы строка не делает. Это "более мягко" чем поиск '+apple
-macintosh'
, для которого присутствие "макинтоша"
заставляет строку не быть возвращенной вообще.
'+apple +(>turnover <strudel)'
Найдите строки, которые содержат слова "яблоко" и "оборот", или "яблоко" и "штрудель" (в любом порядке), но разряд "оборот яблока" выше чем "яблочный штрудель".
'apple*'
Найдите строки, которые содержат слова, такие как "яблоко", "яблоки", "яблочный соус", или "апплет".
'"some words"'
Найдите строки, которые содержат точную фразу "некоторые слова"
(например, строки, которые содержат "некоторые слова мудрости",
но не "некоторые шумовые слова").
Отметьте что""
"символы,
которые включают фразу, являются символами оператора, которые разграничивают фразу. Они не кавычки,
которые включают строку поиска непосредственно.