Геопространственный поиск в ограничительной рамке с использованием Solr

Я хочу найти карту в ограничивающей рамке, широта и долгота для точек северо-востока и точек юго-запада доступны. я имею lat а также lng индексируется как TrieDoubleField тип и latlng как solr.LatLonType тип. Причина для поиска в поле (а не радиус, как в geofilt), потому что поиск выполняется по всем областям, видимым на прямоугольной карте, и мне даны координаты 4 углов карты.

Проблема: Будет ли неэффективно выполнять 2 запроса диапазона, один для lat и один для lng? Как показано на рисунке ниже, необходимо найти множество ненужных диапазонов.

http://127.0.0.1:8080/solr/select?q=*:*fl=id&fq=lat:[42.2823890429 TO 42.4224427748] AND lng:[-71.3345718384 TO -70.7612228394]

Если так, есть ли лучший способ?

fq={!bbox}&sfield=latlng&pt=45.15,-93.85&d=5 не будет работать, так как я не могу рассчитать значение для d чтобы соответствовать границам моей карты.

1 ответ

Решение

В Solr 4 есть набор новых типов пространственных полей, в которых вы можете указать ограничивающий прямоугольник. Здесь есть информация, которую я намерен обновить в эти выходные.

Если вы используете Solr 3, то да, вы можете просто выполнять запросы числового диапазона, как вы делаете. Если вы хотите обработать пересечение линии даты, то это немного сложнее, поскольку для долготы необходимы две пары запросов диапазона. И "нет", этот подход не является неэффективным, как вы просили. Кстати, вам не нужно индексировать широту и долготу отдельно, так как LatLonType уже делает это, и вы можете использовать его поля. Посмотрите в браузере схемы, и вы увидите поле, оканчивающееся на __x и __y (если я помню).

Другие вопросы по тегам