Поисковик с русским лицом

Ну вот наконец я добился сборки индексной таблицы для всей России, в общей сложности это v0.5 :slight_smile:

http://openstreetmap.ru

Дата последнего обновления поиска: 10.09.2012

Что сейчас:
– адресный поиск по нестрогому порядку слов (от регионов до домов)
– поиск идет только по России
– поиск как почтовых адресов, так и POI
– интерфейс будет перерабатываться полностью (уже идет работа Hind и Felis Pimeja), поэтому его косяки не интересны
– группировка нарезанных улиц
– понимание addr:housenumber=“5 К2 С3”
– понимание addr:street2 и addr2:, addr3:
– понимание г., город, ул., улица, д. … мкр., заработало (проблема с кодировкой на серваке)
– для определения принадлежности улиц и домов обязательна граница города/поселка
– обновление вручную
– поиск от текущего положения (текущий город, район, область)

Почему что то не ищется (любой пункт можно изменить, по обоснованной причине):
– ** !! если у членов отношения нет outer/inner, то он игнорируется, и если он был границей - то граница получается поломанной и исключается, а в месте с ней автоматически и все вложенные объекты !!**
– границами города/поселка считаются place (отношение/замкнутая линия) с наличием name или place_name
– улица не должна выходить за пределы города
– пока place=city/town - город, place=village/hamlet - поселок

Что планируется, в зачаточном состоянии:
– онлайн обновление данных
поиск от текущего положения (расстояние уже вычисляется, то пока не придумал как коэффициент правильно сделать)
поиск по POI
life-поиск или подсказка при наборе поисковой строки
– пытаться выдавать наиболее точно то, что хотел пользователь :wink:
зум исходя из размера объекта
– поддержка suburb

Поскольку это еще тестовая версия то:
– выдает техническую информацию, а именно: id-идентификатор позиции в индексной базе, weight-вес релевантности, чем больше тем точнее

Описание api поиска по произвольной строке:

  • Пример запроса: openstreetmap.ru/api/search?q=12&lat=54.75&lon=21.4219&cnt=20&callback=‘cb1’
    – q - строка поискового запроса
    – stype - строка указывающая тип поиска: addr - только адресный поиск, poi - только пои искать, all - addr+poi. По умолчанию all
    – lat - широта центра карты. По умолчанию 0
    – lon - долгота центра карты. По умолчанию 0
    – cnt - максимальное количество ответов. По умолчанию 12
    – asis - при 1 выводить как есть, без экранирования спецсимволов html в выводе. По умолчанию 0
    – callback - оборачивание ответа в функцию callback
  • Ответ в формате json:
    – find - булевое значение удачности поиска
    – search - что искалось
    – id - внутренний id в поисковой таблице, может меняться при обновлении
    – osm_id_n, osm_id_w, osm_id_r - id объектов osm, массив.
    – lat, lon - координаты центра объекта
    – addr_type_id - номер типа объекта: 2-области, края, республики,… (admin_level=4); 3-районы,… (admin_level=6); 4-города,… (place=town/city); 5-деревни, села,… (place=village/hamlet); 6-улицы (highway=*); 7-дома (addr:housenumber)
    – display_name - выводимое имя
    – this_poi - 1 или 0 указывающее нашлось ли пои или адресный объект
  • При запросе с lat/lon не равных нулю, поиск идет от заданного местоположения.

В общем тестируйте…

На данный момент уже выявлено:
дублирование Санкт-Петербург
пустые адреса
падение на строке типа “5/2”
дублирование записей, если граница обозначена линией и есть точка внутри её
не находит объекты с множеством тире в имени
– обработка сокращений в названиях улиц «Большая» до «Б.», «Красный» до «Кр.» ссылка
поиск дома как “9А”, так и “9 А”
– более не точный поиск, если ничего не нашлось ссылка

P.S. просьба, если не нашлось, давать ссылки то, что должно было найтись

Супер! Всё, что искал, нашлось!

Есть только проблема с альтернативными названиями. В Красноярске есть “проспект имени газеты Красноярский рабочий”. Её так полностью в поиске не напишешь, обычно называют “Красноярский рабочий” или “красраб”. Куда эти альтернативные названия записать, чтобы индексировались и по ним можно было искать?

по идее alt_name http://wiki.openstreetmap.org/wiki/RU:Key:name , но мой поисковик пока их не нюхает.

Да, всё запрошенное замечательно находит.

Но в идеале находить надо то, что искали. То есть когда ищем улицу - не надо вываливать все дома по этой улице

Это да, но еще не придумал как точно научить поисковик этому

Круто, релевантность всегда адекватно считается
К примеру “Екатеринбург 8 марта 1” результат …дом 37/1 выше чем …дом 1 хорошо что нашлись оба, но хотелось бы чтобы … дом 1 был выше.

Кстати если ввести “8 марта 1 Екатеринбург” то …дом 1 будет первым.

Еще из хотелок - при построении индекса генерить алиасы для имен улиц с римскими числами “22 Партсъезда 11 Екатеринбург” и “Екатеринбург 22 Партсъезда дом 11” не дали результатов т.к. улица заведена как “XXII Партсъезда”

Отлично ищет :slight_smile: Ни одного промаха…

Еще хотелка - обработка сокращений типа К. Маркса - если адрес будет копипастится, то попадание инициала в запрос очень вероятный случай.

Ничего что я его на заковыристые случаи проверяю? Так то поисковик очень хорош!

Вот чего нашла: есть 15-й микрорайон. Годно было бы в поиске указывать 15 мкр.

Варшавка ни в Варшавскую улицу, ни в Варшавское шоссе не превращаются. Правда, гугл этого тоже не умеет, но Яндекс-то справляется…

old_name не находит.

“москва центральная” находит одну улицу
“москва внуково центральная” и “москва толстопальцево центральная” не находит вообще ничего
“москва заветная” ничего не находит
“внуково заветная” находит

“барятино” первые три результата без названия (наиболее релевантные!), причём второй и третий - одно и то же (граница и точка)

“москва” находит много точек на севере города :slight_smile:

по запросу “московский” самым релевантным результатом является Московская улица в Печоре, причём точка не имеет адреса, где же город Московский - вообще непонятно

“новгород” - находит Нижний и в нём же посёлок Мостотряд

“киров” - …

короче, есть над чем работать

да я уже тоже обнаружил выпавшие адреса, разбираюсь что с ними не так

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

Спасибо, уже впечатляет!

Надеюсь, со временем можно будет искать не только дома :slight_smile: Вводя “Уфа”, человек всё же рассчитывает увидеть город и речку, а не список всех адресов)
Впечатляет почти полная независимость от порядка слов (типа “ят сена сун уфа”).

Специально открыл страницу, чтобы посмотреть, что это такое :slight_smile:
И нашёл небольшой недочёт: слишком мелкий зум.

3-я линия 27 Ростов-на-Дону - не находит, стандартный находит и выдаёт первым вариантом.

Зум пока не исходит от размера данных, просто жестко указано

можно ссылку на объект в осм? или на место на карте

Так и должно быть или это только у меня так выезжает…

На объект не получится - там интерполяция, ссылка на место

Чета мой дом не ищет… “Металлострой, Полевая ул., 20”