#swift #sorting #geolocation #algolia
#swift #сортировка #геолокация #algolia
Вопрос:
У меня проблема с сортировкой геолокации Algolia в приложении iOS. Мне нужно отобразить все документы в радиусе 100 км от местоположения пользователя. У меня в индексе есть несколько документов. Документ выглядит следующим образом:
"document": {
"price": 5000,
"unit": "cały projekt",
"_geoloc": {
"lat": 54.5,
"lng": 18.55
},
"title": "Test ogloszenia",
"range": 0,
"activeFrom": {
"_seconds": 1597042800,
"_nanoseconds": 0
}
}
В моем ранжировании и сортировке Algolia у меня по умолчанию установлен GEO.
Мой Swift-код для сортировки местоположений выглядит следующим образом:
func getAnnouncesLocation(location: CLLocationCoordinate2D, completion: @escaping ([Announcement]) -> ()) {
var announcementsArray = [Announcement]()
let query = Query(query: "")
query.aroundLatLng = LatLng(lat: location.latitude, lng: location.longitude)
query.aroundRadius = .explicit(100000) // 100 km
collectionIndex = searchClient.index(withName: "products_geolocation")
collectionIndex.search(query) { (content, error) in
guard let content = content else {
if let error = error {
print(error.localizedDescription)
}
return
}
print("HITS (content)")
}
}
Код не возвращает никакой ошибки, но содержимое пустое.
Другая сортировка, например, по цене, работает отлично. Единственная проблема связана с геолокацией.
Если это может помочь настроить сортировку по цене, мне нужно добавить атрибут сортировки по, подобный этому: document.price
на панели инструментов.
Я сохраняю данные в Algolia со своего сервера в Node.js и там я создаю _geoloc
значение. Широта и долгота жестко запрограммированы для тестирования, поэтому проблем с асинхронностью нет.
Спасибо за любую помощь.
С уважением, Мэтт
Ответ №1:
Я обнаружил ошибку в своем проекте. При отправке документа в Algolia я отправляю вот так:
const record = {
objectID: doc.id,
document: document
};
где document
содержались все свойства, а также _geoloc
свойство. После некоторого расследования я отделился _geoloc
от документа, который я отправил, как показано ниже:
const record = {
objectID: doc.id,
document: document,
_geoloc: coordinates
};
Теперь все работает нормально.
Приветствия