Поиск человека в базе данных. С релевантностью .

igorelf

Новичок
Поиск человека в базе данных. С релевантностью .

есть собственно база данных:
Код:
surname_rus | name_rus     | suname_eng | name_eng    
----------------------------------------------------------------------
Сузуки         | Айри         | Suzuki         |  Airi

Нужно сделать поиск человека. Причем человек может путать местами имя и фамилию. То есть... Нужно человеку найти Suzuki Airi.
Он пишет:
1)Suzuki Airi
2)Airi Suzuki
3)Сузуки Айри
3)Айри Сузуки

Тут еще более менее понятно. Берем строку, разбиваем её на массив с двумя элементами. Ну и можно по очереди осуществить поиск, то есть.. определем язык.. Допустим если язык Рус то surname_rus like '%search[0]%' AND/OR name_rus like '%search[1]%' и потом наоборот( меняем местами search[0] и search[1] )

А если допустим мы ищим Хван Ин Рве ( Hwang In roi )?
Код:
surname_rus | name_rus | suname_eng | name_eng
----------------------------------------------------------------------
Хван         | Ин Рве    | Hwang      |  In-roi
Как тут тогда поступать, при условие, что человек может написать в поиске не Хван Ин Рве, а Ин Рве Хвен?

После этого желательно выводить по порядку: сверху наиболее релевантных к нашему запросу людей, а снизу если совпало только фамилия или имя.

Где копать? Заранее спасибо.
 

kruglov

Новичок
fulltext-индекс на все поля, настроить MySQL, чтоб слова короче 4 символов могли быть.

p.s. Если, это, конечно, MySQL...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
igorelf
Скажите, а Вы прежде чем открывать топик попробовали свой полнотекстовый поиск?
 

Alexandre

PHPПенсионер
а мне кажется, что полнотекстный поиск здесь не поможет.

определяем по коду первого символа язык строим либо англоязычный поиск, либо русский (по соответствующим полям).
Остается вопрос с релевантностью определения фамилии :
Иванов Иван
Петров Иван
Иван Петров
Иван Николаев

Может можно выделить как-то имена и дать им более низкий приоритет вывода.
чтоб на запрос Иван Петрова выдало:
Петров Иван
Петров Сергей

а не выдавало 100 Иванов, и среди них одного Петрова.
 

igorelf

Новичок
Полнотекстовый поиск, соотвественно, решение проблемы. спасибо
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
igorelf
а вообще есть смысл Имя и Фамилию писать в разные поля
Сами ответить не можете? А вообще есть смысл использовать БД?

Поиск сейчас 'ну работает', но если искать 3 и более слов - то 3 и последующие отбрасываются. ...
Скажите, пожалуйста, что Вы от нас то хотите?

Если человек путает фирст-нейм и ласт-нейм это ЕГО проблемы, а не Вашы.
 

berkut

Новичок
Mr_Max
Если человек путает фирст-нейм и ласт-нейм это ЕГО проблемы,
бред какой-то. мне ничего неговорит Airi Suzuki - хрен знает, где тут имя(если абстрогироваться от первого поста). ктому-же, в России часто употребляется сначала фамилия, потом имя. А в европейских странах наоборот
 

igorelf

Новичок
Делаем полныйтекст из suname_eng и name_eng, после чего можем выполнять следующие:

SELECT * FROM table WHERE MATCH (surname_eng,name_eng) AGAINST ('Airi Suzuki');
или AGAINST ('Suzuki Airi');

Оба результата возвращают то, что требуется. Конечно проблема решена не до конца.
 

dimagolov

Новичок
Автор оригинала: Mr_Max
Если человек путает фирст-нейм и ласт-нейм это ЕГО проблемы, а не Вашы.
Позволю с Вами не согласиться. Особо ярко это касается японских имен. Сами по себе японские имена это нечто, на изучении того, что они из себя представляют можно легко штамповать научные статьи. Подробно можно в википедии почитать, но в общем фишка в том, что для записи имен у японцев особые иероглифы, которые читаются по-особому. Соответственно при записи японского имени на не-японский язык японское имя каким-то образом записывается согласно фонетическому звучанию. Ну а потом идут приколы, так как каждый при этом трактует по-своему что где же у японца имя а где что другое. Потом такое записанное по-английски японское имя перевелем на руссуий и тут уже вообще никто ничего не разберет.

Так что проблема ИМХО не надуманная, но и решение "в лоб" как бы не катит, так как в англоязычных странах Stuart Morris & Morris Stuart запросто могут быть разными людьми :)
 

igorelf

Новичок
Далее не совсем ясно, что делать например с именем типа Ким Ир Сен, где каждое слово 3 или меньше букв. А нужно, как минимум 4. К настройкам mySQL, к сожалению, доступа нету, чтобы это исправить. По ссылке, проведенной Mr_Max.. дают следующие решение проблемы:
типа ... AGAINST () AND col LIKE '%Ким%'
думаю это не самое изящное решение проблемы...
 
Сверху