Обзор Mroonga
После установки Mroonga (см. О Mroonga), его основное использование аналогично использованию обычного индекса полнотекстового поиска.
Например:
CREATE TABLE ft_mroonga(copy TEXT,FULLTEXT(copy)) ENGINE=Mroonga;
INSERT INTO ft_mroonga(copy) VALUES ('Once upon a time'),
('There was a wicked witch'), ('Who ate everybody up');
SELECT * FROM ft_mroonga WHERE MATCH(copy) AGAINST('wicked');
+--------------------------+
| copy |
+--------------------------+
| There was a wicked witch |
+--------------------------+
Оценки
Mroonga также может сортировать по весу. Например, сначала добавьте ещё одну запись:
INSERT INTO ft_mroonga(copy) VALUES ('She met a wicked, wicked witch');
Записи могут возвращаться по весу, например, недавно добавленная запись имеет два вхождения слова «wicked» и более высокий вес:
SELECT *, MATCH(copy) AGAINST('wicked') AS score FROM ft_mroonga
WHERE MATCH(copy) AGAINST('wicked') ORDER BY score DESC;
+--------------------------------+--------+
| copy | score |
+--------------------------------+--------+
| She met a wicked, wicked witch | 299594 |
| There was a wicked witch | 149797 |
+--------------------------------+--------+
Парсер
Mroonga позволяет задать другой парсер для поиска, указав парсер в CREATE TABLE в качестве комментария или, в более старых версиях, изменив значение системной переменной mroonga_default_parser.
Например:
CREATE TABLE ft_mroonga(copy TEXT,FULLTEXT(copy) COMMENT 'parser "TokenDelimitNull"') ENGINE=Mroonga;,
или
SET GLOBAL mroonga_default_parser = 'TokenBigramSplitSymbol';
Доступны следующие настройки парсера:
| Настройка | Описание |
|---|---|
| off | Токенизация не выполняется. |
| TokenBigram | Значение по умолчанию. Последовательные буквы, цифры или символы обрабатываются как токен. |
| TokenBigramIgnoreBlank | Аналогично TokenBigram , но пробелы игнорируются. |
| TokenBigramIgnoreBlankSplitSymbol | Аналогично TokenBigramSplitSymbol, но пробелы игнорируются. |
| TokenBigramIgnoreBlankSplitSymbolAlpha | Аналогично TokenBigramSplitSymbolAlpha , но пробелы игнорируются. |
| TokenBigramIgnoreBlankSplitSymbolAlphaDigit | Аналогично TokenBigramSplitSymbolAlphaDigit , но пробелы игнорируются. |
| TokenBigramSplitSymbol | Аналогично TokenBigram , но последовательные символы не обрабатываются как токен, а токенизируются в биграммы. |
| TokenBigramSplitSymbolAlpha | Аналогично TokenBigram , но последовательные буквы не обрабатываются как токен, а токенизируются в биграммы. |
| TokenDelimit | Токенизация производится путем разделения по пробелам. |
| TokenDelimitNull | Токенизация производится путем разделения по нулевым символам (\0). |
| TokenMecab | Токенизация с использованием MeCab. Требуется, чтобы Groonga был собран с поддержкой MeCab. |
| TokenTrigram | Токенизация в триграммы, но последовательные буквы, цифры или символы обрабатываются как токен. |
| TokenUnigram | Токенизация в униграммы, но последовательные буквы, цифры или символы обрабатываются как токен. |
Примеры
TokenBigram против TokenBigramSplitSymbol
TokenBigram не соответствует частичным символам, которые TokenBigramSplitSymbol соответствует, так как TokenBigramSplitSymbol не обрабатывает последовательные символы как токен.
DROP TABLE ft_mroonga;
CREATE TABLE ft_mroonga(copy TEXT,FULLTEXT(copy) COMMENT 'parser "TokenBigram"')
ENGINE=Mroonga;
INSERT INTO ft_mroonga(copy) VALUES ('Once upon a time'),
('There was a wicked witch'),
('Who ate everybody up'),
('She met a wicked, wicked witch'),
('A really wicked, wicked witch!!?!');
SELECT * FROM ft_mroonga WHERE MATCH(copy) AGAINST('!?');
Empty set (0.00 sec)
DROP TABLE ft_mroonga;
CREATE TABLE ft_mroonga(copy TEXT,FULLTEXT(copy) COMMENT 'parser "TokenBigramSplitSymbol"')
ENGINE=Mroonga;
INSERT INTO ft_mroonga(copy) VALUES ('Once upon a time'),
('There was a wicked witch'),
('Who ate everybody up'),
('She met a wicked, wicked witch'),
('A really wicked, wicked witch!!?!');
SELECT * FROM ft_mroonga WHERE MATCH(copy) AGAINST('!?');
+-----------------------------------+
| copy |
+-----------------------------------+
| A really wicked, wicked witch!!?! |
+-----------------------------------+
TokenBigram против TokenBigramSplitSymbolAlpha
DROP TABLE ft_mroonga;
CREATE TABLE ft_mroonga(copy TEXT,FULLTEXT(copy) COMMENT 'parser "TokenBigram"')
ENGINE=Mroonga;
INSERT INTO ft_mroonga(copy) VALUES ('Once upon a time'),
('There was a wicked witch'),
('Who ate everybody up'),
('She met a wicked, wicked witch'),
('A really wicked, wicked witch!!?!');
SELECT * FROM ft_mroonga WHERE MATCH(copy) AGAINST('ick');
Empty set (0.00 sec)
DROP TABLE ft_mroonga;
CREATE TABLE ft_mroonga(copy TEXT,FULLTEXT(copy) COMMENT 'parser "TokenBigramSplitSymbolAlpha"')
ENGINE=Mroonga;
INSERT INTO ft_mroonga(copy) VALUES ('Once upon a time'),
('There was a wicked witch'),
('Who ate everybody up'),
('She met a wicked, wicked witch'),
('A really wicked, wicked witch!!?!');
SELECT * FROM ft_mroonga WHERE MATCH(copy) AGAINST('ick');
+-----------------------------------+
| copy |
+-----------------------------------+
| There was a wicked witch |
| She met a wicked, wicked witch |
| A really wicked, wicked witch!!?! |
+-----------------------------------+
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/mroonga-overview/