0
Answered

Подсказки работают только когда указано "region": "Москва", но не "region": "г Москва" в свойстве "locations"

Yury Nasretdinov 2 years ago in Подсказки • updated by Антон 11 months ago 5
Вопрос состоит в следующем: мы посылаем запрос в API подсказок и указываем туда, как мы ожидаем, то, что логичнее всего — полное название области/города/региона/населенного пункта. Мы так делаем, потому что это удобно и потому, что ваш пример с отдельными полями ( https://dadata.ru/suggestions/#address-granular ) подсказывает полные названия.

Однако, нам в ответ ничего не приходит. Вот пример запроса:

$ curl -s -d '{"query":"тве","count":2,"locations":[{"region":"г Москва"}],"restrict_value":true}' -H 'Accept: application/json' -H 'Content-Type: application/json' -H 'Authorization: Token ...' 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address'
{"suggestions":[]}

То есть, 0 подсказок. Если же мы укажем "Москва" вместо "г Москва" (т.е. указано только название города, без типа), то всё неожиданно начинает работать:

$ curl -s -d '{"query":"тве","count":2,"locations":[{"region":"Москва"}],"restrict_value":true}' -H 'Accept: application/json' -H 'Content-Type: application/json' -H 'Authorization: Token ...' 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/address'
{"suggestions":[{"value":"ул Тверская", ...

Аналогично происходит с другими полями (region, area, settlement). Мы хотим использовать подсказки адреса в мобильном приложении, поэтому ввод поля адрес, как единого поля, нам не подходит, потому что пользователю полный адрес вводить будет неудобно. Также, мы не хотим использовать kladr_id в подсказке, потому что пользователь может не выбрать ни одну из подсказок при вводе города и области из-за того, что у него может быть медленный интернет.
Есть ли какая-то возможность ограничивать подсказки, не используя kladr_id и передавая введенный пользователем текст «как есть»?

Answer

Answer
Under review
Есть ли какая-то возможность ограничивать подсказки, не используя kladr_id и передавая введенный пользователем текст «как есть»?

Да, можно добавить конкатенацию значений из вышестоящих строк в начало запроса по улице. Например:

1. Пользователь ввёл в город: г Москва.
2. Вводит в улицу: тве → отправить запрос подсказок: "г Москва тве".

или

1. Пользователь ввёл в область: Самарская область.
2. Ввёл в город: Тольятти.
3. Вводит в улицу: ав → отправить запрос подсказок: "Самарская область Тольятти ав".

Вам подойдёт такое решение?

Answer
Under review
Есть ли какая-то возможность ограничивать подсказки, не используя kladr_id и передавая введенный пользователем текст «как есть»?

Да, можно добавить конкатенацию значений из вышестоящих строк в начало запроса по улице. Например:

1. Пользователь ввёл в город: г Москва.
2. Вводит в улицу: тве → отправить запрос подсказок: "г Москва тве".

или

1. Пользователь ввёл в область: Самарская область.
2. Ввёл в город: Тольятти.
3. Вводит в улицу: ав → отправить запрос подсказок: "Самарская область Тольятти ав".

Вам подойдёт такое решение?

Здравствуйте. Мы, собственно, так и сделали, но результат нам совсем не нравится, поскольку при вводе города подсказываются не только города, но и улицы, например, что, мягко говоря, не очень хорошо выглядит с точки зрения пользователя.

Чтобы в городах не подсказывались улицы, передавайте параметры from_bound и to_bound.

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