Коректний гео пошук в Sphinx

Як виявилось, стандартний підхід для геопошуку в 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


Індекс буде створено коректно.
  • +3
  • 26 травня 2010, 18:04
  • zenyk
  • 2

Гео пошук за допомогою Sphinx, MySQL та PHP

Недавно виникла потреба реалізувати пошук найближчих місць, тобто зробити гео пошук. В MySQL на скільки мені відомо таких вбудованих функцій немає. Є гарний опис як це зробити самому без вбудованих функцій.
Сам автор зазначає що швидкість є досить малою і за допомогою Sphinx можна досягти кращих результатів.
Під час пошуку знайшов гарний опис як організувати geo/spatial пошук за допомогою Sphinx, MySQL та PHP. Sphinx є важливим, його замінити не можна. PHP та MySQL можна підміняти на те що вам більше підходить.

Sphinxsearch - об'єднання індексів (index merging)

В сфінкса (sphinx-search) існує дуже хороше рішення для оптимізації процесу індексації.

Суть рішення розглянута в статті "Дельта індекс у Sphinx". Дельта індекси істотно знижують ресурсомісткість постійної переіндексації, дозволяючи робити її частіше і мати більш актуальні дані в результатах пошуку.

Використання дельта індексів проте вимагає періодичного оновлення основного індексу, щоб оновити змінені та викинути видалені документи. Та й сам по собі дельта індекс зростає з часом, вимагаючи все більше ресурсів для переіндексації (що робить його неефективним).

Найпростіше рішення — повна переіндексація в непікові години (або дні). Не найоптимальніший підхід, бо повна переіндексація може займати години, а іноді і дні. Існує інше рішення для оновлення основного індексу, що може заощадити безліч ресурсів — об'єднання індексів (index merging).

Використання index merging (рос.).