2011-05-03 1 views
4

점수와 위치별로 검색 결과를 주문하고 싶습니다. DB를 각 사용자는/많은 LAT하고 나는 현재 색인 오전 :지리적 위치에 따른 Solr/흑점 검색 결과를 주문하십시오.

location :coordinates do 
    Sunspot::Util::Coordinates.new latlon[0], latlon[1]  
end 

나는 또한 같은 방식으로 인덱싱에 대한 검색을 수행 할 모델입니다. 본질적으로 내가 달성하고자하는 것은 결과가 점수별로 정렬 된 다음 위치별로 정렬된다는 것입니다. 따라서 월마트를 검색하면 내 월마트가 지리적으로 근접한 위치에있는 것을 확인하고 싶습니다.

나는 solr의 새로운 geo-sort에 대해 읽었지 만 알파가 없거나 sunspot이 래퍼를 구현했는지 확실하지 않습니다.

무엇을 권하고 싶습니까?

답변

6

Sunspot이 위치 유형을 계산하는 방식 때문에 대상과의 거리별로 정렬하려면 몇 가지 추가 작업이 필요합니다. 작동 방식은 각 지점에 대한 지리 해시를 만든 다음 해당 지리 해시에 대한 일반 전체 텍스트 검색을 사용하여 검색하는 것입니다. 그 결과, 10km 떨어진 지점이 5km 떨어진 지점보다 더 멀리 있는지를 판단 할 수 없지만, 50km 떨어진 지점이 1-2km 지점보다 더 멀리 있는지 여부를 알 수 있습니다 . 정확한 거리는 임의적이지만 결과는 사용자가 원하는대로 세분화되지 않고 검색이 수용 가능한 근접 거리에있는 포인트를 필터링하는 방법으로 더 많이 작용한다는 것입니다.

  1. SOLR 3.1 이상으로 업그레이드하고 upgrade your schema.xml to use the new spatial search columns : 당신이 내장 된 위치 검색을 사용하여 포인트를 필터링 한 후, 당신이 원하는 것을 달성하는 세 가지 방법이 있습니다. 그런 다음 이러한 새로운 데이터 유형으로 작업하는 필드와 순서를 작성하려면 Sunspot을 사용자 정의하여 수정해야합니다. 지금까지 내가 알고있는 한, Sunspot에서는 아직 사용할 수 없기 때문에, 직접 연결해야만한다. 수동 설정을하기 위해서 Solr을 파헤쳐 야 할 것이다.
  2. 레버리지는 Spatial Solr Plugin입니다. 새로운 JAR을 Solr 디렉토리에 설치해야하고 Sunspot을 약간 수정해야하지만 비교적 어려움이 없으며 전체 지침은 here입니다.
  3. DB를 활용하면 DB가 위치 열에도 색인이있는 경우 Sunspot 내장 위치 검색을 사용하여 합리적인 크기의 세트로 결과를 필터링 할 수 있습니다. 그런 다음 해당 결과에 대한 DB를 쿼리하고 자신의 거리 함수를 사용하여 위치에 근접한 순서로 정렬 할 수 있습니다.