Sunspot은 지리적 공간 검색을 지원하지만 일부 제한 사항이 있습니다.
색인 :
searchable do
text :location
location :coordinates do
Sunspot::Util::Coordinates.new latitude, longitude
end
end
검색 :
coord = # whatever...
with(:coordinates).near(coord[0], coord[1], :precision => 3)
하지만 ... 정말 정확한 아니라 내가 잘못 아니에요 경우가 지리적 해시를 사용하고. 따라서 2 점이 서로 가깝지만 발견되지 않을 수도 있습니다.
또한 near
을 패싯에 중첩시킬 수 없습니다.
나는 ADAM의 조언을 따르고 탄력적 인 검색을 할 것입니다. 그게 내가 한 짓이야. 당신은 훨씬 더 많은 통제권을 얻습니다.
타이어는 지형 공간 검색도 지원하지만 필요하지 않기 때문에 DSL에 구체적인 방법이 없습니다. 그들은 나중에 생각을 추가 할 계획입니다.
색인 :
tire.mapping do
indexes :location, type: 'string', analyzer: 'snowball'
indexes :latitude_longitude, type: 'geo_point'
end
def latitude_longitude
[latitude, longitude].join(",")
end
def to_indexed_json
to_json(methods: ['latitude_longitude'])
end
검색 : 후세를 들어
filter :geo_distance, distance: "#{distance}km", latitude_longitude: [user.latitude, user.longitude].join(",")
자신 만의 상자를 운영하는 경우 http://www.elasticsearch.org/ 대신 ElasticSearch를 살펴보십시오. 솔라보다 설치가 쉽고 스키마가 없으며 문서 지향적이며 시간이 갈수록 샤딩을 지원합니다. Lucene을 기반으로 (solr와 마찬가지로) 타이어 젬을 레일로 사용할 수 있습니다. – ADAM
@ADAM 이것은 지금 heroku 배포 프로젝트가 될 것입니다. 또한 타이어가 지형 공간 검색을 지원하지 않는 것처럼 보입니까? 정보 주셔서 감사합니다, 우리는 나중에 전용 환경으로 확장 할 수 있습니다! – Chance
좋아, 그럴 수도 있다고 생각해서 코멘트로 올렸습니다. ElasticSearch는 지형 공간으로 움직이며 두 지점 + 지오 펜싱 및 패싯이 있습니다. 솔라 기반 솔루션보다 통합하는 것이 훨씬 낫다는 것을 알게되었습니다. – ADAM