Як виявилось, для геопошуку в Sphinx не працює.
Тобто якщо ви використаєте для індексування наступний вираз:
sql_query = select id, radians(longitude) as longitude, radians(latitude) as latitude from locations
Індекс не буде створено. Відповідно пошук працювати не буде. Навіть не знаю чи це баг чи фіча, але виправляється досить просто.
Слід додати одне текстове поле до результату:
sql_query = select id, radians(longitude) as longitude, radians(latitude) as latitude, location_name as location_name from locations
Недавно виникла потреба реалізувати пошук найближчих місць, тобто зробити гео пошук. В MySQL на скільки мені відомо таких вбудованих функцій немає. Є як це зробити самому без вбудованих функцій.
Сам автор зазначає що швидкість є досить малою і за допомогою можна досягти кращих результатів.
Під час пошуку знайшов як організувати geo/spatial пошук за допомогою , та . Sphinx є важливим, його замінити не можна. PHP та MySQL можна підміняти на те що вам більше підходить.
В сфінкса (sphinx-search) існує дуже хороше рішення для оптимізації процесу індексації.
Суть рішення розглянута в статті "". Дельта індекси істотно знижують ресурсомісткість постійної переіндексації, дозволяючи робити її частіше і мати більш актуальні дані в результатах пошуку.
Використання дельта індексів проте вимагає періодичного оновлення основного індексу, щоб оновити змінені та викинути видалені документи. Та й сам по собі дельта індекс зростає з часом, вимагаючи все більше ресурсів для переіндексації (що робить його неефективним).
Найпростіше рішення — повна переіндексація в непікові години (або дні). Не найоптимальніший підхід, бо повна переіндексація може займати години, а іноді і дні. Існує інше рішення для оновлення основного індексу, що може заощадити безліч ресурсів — об'єднання індексів (index merging).