Как сделать поиск с возможностью поиска по транслиту?

Доброго времени суток. К примеру есть таблица peoples с полями id, name,...
Подскажите, каким образом можно сделать поиск по полю "name", который понимает транслит? Ну т.е к примеру, как в контакте, я начинаю вводить в поле поиска "anna iwano", а в результатах поиска отображается:
Анна Иванова
Anna Ivanova
Anna Iwanowa

Заранее спасибо за ответ.
  • Вопрос задан
  • 2930 просмотров
Пригласить эксперта
Ответы на вопрос 4
Сделайте транслитерацию в коде приложения, а результат используйте для поиска в базе данных.
Ответ написан
Комментировать
ddv88
@ddv88
Binance Futures
function translit($from) {
		$to = array(
			'a' => 'а',   'b' => 'б',   'v' => 'в',	
			'g' => 'г',   'd' => 'д',   'e' => 'е',	
			'zh' => 'ж',  'z' => 'з',   'i' => 'и',   
			'й' => 'y',   'к' => 'k',   'l' => 'л',   
		);
		return strtr($from, $to);
	}

Ну и так далее...
Для транслита так, для росиянского array_flip();
Ответ написан
Комментировать
VaaL2004
@VaaL2004
Может быть написать sql функцию? После гугления нашел пример:
CREATE FUNCTION `translit`(`_txt` TEXT) 
RETURNS text 
BEGIN 
  SET _txt=REPLACE(REPLACE(REPLACE(_txt /* И так далее, для каждого символа */,'В','V'),'Б','B'),'А','A'); 
  RETURN _txt; 
END
Ответ написан
Комментировать
@romamo
Архитектура. Highload. Data mining
В зависимости от вариантов использования, применяем следующие варианты поочередно до успеха либо параллельно:
1. Ищем как есть
2. Пытаемся определить кодировку и язык, нормализуем и снова ищем (преобразуем транслит w и v->в, забыли переключить раскладку bdfyjd -> иванова)
3. Ищем нечеткое совпадение (инанова)

Также не забываем описать правила ранжирования (иван - это все "иваны" или все иван* )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы