помогите плз с алгоритмом поиска

gnollik

Новичок
здравствуйте, опишу в кратце что есть и что надо:

есть майскл база на 100к строк. В ней есть 3 колонки (страна, штат, город) по которым надо сделать выборку.

Выборки нужно 2:

1я точная где юзер в определенные поля вводит страну, штат (если есть) и город - с этим проблем нет, уже сделал.

2я где юзер в одно поле вводит запрос. И вот тут проблема так как хз в каком порядке и что он там будет вводить... Тоесть он может ввести только город (или вообще только часть города если название города из 2-3 слов) + может ввести штат (а может и не ввести) + может ввести страну(причем хз, или полностью united states of america или usa или вообще сокращено us). Так же он может ввести в любом порядке, тоесть "штат, город, страна" или "город, страна, штат"...

В принципе я примерно понимаю как делать:
1. разобрать строку на слова.
2. прогнать поиск каждого слова по колонке "страна".
3. если найдена страна, то дальше искать оставшиеся слова в колонке "штат" в привязке к найденной стране.
4. Если ничего не найдется в колонке "штат" то переходить к городам...
Ну и так далее, хоть и примерно, но понятно в какую сторону копать.

Но вот есть например в "америке" город под названием "польша", тоесть если юзер введет польша (город) + америка (страна) то он ничего не найдет, а если и найдет, то фигню какую-то... И ето не единичный пример, таких пересечений достаточно много (на 100к строк 1000-2000 строк найдется с подобной фигней) - как с таким теоретически можно бороться?

Получается несколько проблем:

1. united states of america или usa или вообще сокращено us
2. пересечения типа "польша (город) + америка (страна)"
3. кол-во запросов - ето тоже непонятно, тоесть можно наверное написать 50 разных вариантов переборок, которые перекрестными выборками доставали то что надо, только хз сколько ресов на сервере будет на ето уходить, если одновременно 100 юзеров будут что-то искать по такой достаточно не малой базе еще и с таким кол-вом переборов...
 

Alien85

I like my cat
gnollik
1. Добавить колонку сокращений и вручную заполнить +
2 и 3. Полнотекстовый поиск (но короткие сокращения работать не будут или придется перенастраивать mysql)
 

gnollik

Новичок
Полнотекстовый поиск - ето хорошо, но я подозреваю что будет достаточно накладно по ресурсам... Лана, я так подумал, лучше сделаю подпись под строкой поиска типа "введите "город" или "город, страна" или "город, штат, страна":" - потом буду делить по "," смотреть сколько параметров получится, и исходя из етого делать переборку где надо... тогда будет намного проще... ну а если юзер читать не умеет и не поймет из надписи в каком порядке вводить, то тут уж ничего не поделаешь - пусть учится читать... )
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
gnollik
Сделайте автокомплит на js, пользователь набирает часть вы ему все что есть по этой части, город, страна и т.д. соответсвено так по каждому слову, а в скрипте прописывате какое слово, из какого поля взяли, заодно и решите проблему ошибок ввода
 

kotpl_

Новичок
Сделайте так:
1. Есть три выпадающих списка, который заполняются в зависимости от того, что выбрано в других.
2. Пользователь в 1-ом списке выбирает страну, значит второй и третий список заполняются соответствующим образом.
Я думаю это оптимальный вариант. Все эти полнотекстовые поиски, неполные сравнения и т.д. - это лишь частичное решение.
 

antson

Новичок
Партнер клуба
последовательное уточнение
Страна - select из option полученных как distinct от колонки
После выбора появляется второй или сразу третий селект , если штатов нет.
Где опять список дистинктов но уже с учетом предыдуших выборов.

Если списки монстроидальные , то можно вместо селектов делать инпуты с автозавершением ввода как у яндекса
 
Сверху