MySQL Natural Lanquage Search не работает, как я надеялся

0

У меня есть таблица людей с полными именами. Я бы хотел, чтобы пользователи могли искать его с помощью частичных имен и имен с ошибками. Поэтому поиск "Андрея" также должен вернуть "Андреа" и т.д. Я думал, что поиск FULLTEXT был ответом, но он не работает иначе, чем если бы я искал с помощью ... LIKE '%Andrew%'.
Есть ли функция или функция в MySQL, которая будет искать на основе сходства строк? Или мне придется сворачивать свой собственный на конец PHP, используя levenshtein() или что-то подобное?

Данная таблица:

CREATE TABLE `people` (
  `FullName` varchar(30) default NULL,
  `namesID` int(11) NOT NULL auto_increment,
  PRIMARY KEY  (`namesID`),
  FULLTEXT KEY `fulltext_FullName` (`FullName`)
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

LOCK TABLES `people` WRITE;
/*!40000 ALTER TABLE `people` DISABLE KEYS */;
INSERT INTO `people` (`FullName`,`namesID`)
VALUES
    ('Mark Peters',1),
    ('Bob Jackson',2),
    ('Steve Kipp',3),
    ('Joe Runty',4),
    ('Tina Mardell',5),
    ('Tim Havers',6),
    ('Rich Beckett',7),
    ('Mary Dalson',8),
    ('Maria Grento',9),
    ('Michael Colt',10),
    ('Andrew Peters',11),
    ('Andre Bison',12),
    ('Andrea Masters',13),
    ('Marla Tool',14);

/*!40000 ALTER TABLE `people` ENABLE KEYS */;
UNLOCK TABLES;

И этот запрос:

SELECT *
FROM people
WHERE MATCH(FullName) AGAINST('Andrew');

Я получаю только:

FullName        namesID
Andrew Peters   11

Когда я также хочу получить:

Andre Bison
Andrea Masters

и др.

Теги:
nlp
full-text-search

1 ответ

3
Лучший ответ

Индексы FULLTEXT - это не что иное, как индексы в полном тексте. Они разрешают поиск только в тексте, который у вас есть.

MySQL имеет функцию SOUNDEX() и сокращенный оператор x SOUNDS LIKE y, который совпадает с SOUNDEX(x) = SOUNDEX(y).

Если soundex не отвечает вашим потребностям, вам действительно нужно будет использовать язык программирования, такой как PHP, чтобы выполнить то, что вы хотите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню