2012-06-13 3 views
0

스핑크스 2.0을 사용하고 있습니다.스핑크스에서 사용자 지정 정렬/특정 필드의 일치 및 거리로 정렬

나는 다음과 같은 결과를 달성하고자 :

  1. 사용자가 다른 검색 조건 입력 태그, 사용자 입력 태그와 관련된 문서의 거리상으로 분류, 상단에 와야합니다.
  2. 그런 다음 문서는 거리별로 정렬 된 태그를 포함하지 않습니다.

내가 뭘하고있는 중이 야 : 나는 @name, @tag, @streetname etc.so처럼 사용하여 동시에 서로 다른 매개 변수를 검색하고

을 내가

$cl->SetMatchMode(SPH_MATCH_EXTENDED);

이하로 사용하고

내가저기서하고 여러 값을 포함 할 수 있습니다 제기 $cl->SetSortMode(SPH_SORT_EXTENDED, '@geodist asc');

태그를 사용하여 거리만큼 결과를 정렬 g OR 연산자를 사용하여 원하는 결과를 얻습니다.

@tags 만 검색하면 내가 언급 한 요구 사항을 충족시킬 수 있습니다. 그러나 사용자 입력이 @ 태그 음식 @ 저녁 음식 @ 저녁 도시 @ 이름 택시

의 경우 결과가 다음과 같습니다. 런던 택시 거리 : 런던이 위 또는 다른 위치에서 위도 순으로 정렬 순서를 위반합니다. 런던은 두 가지 매개 변수가 있기 때문에. 태그로 정렬하고 싶습니다. 다른 검색어의 가중치를 정렬 순서에 포함하고 싶지는 않습니다.

랭킹 모드는 다음과 같습니다 $cl->setRankingMode(SPH_RANK_PROXIMITY_BM25);

어떤 제안이 문제를 극복하기 위해? 또는 그것을 구현하는 다른 방법.

많은 감사.

답변

1

이 문제를 해결하는 방법은 태그 필드의 일치 항목을 정렬하는 방법이라고 생각합니다. 테스트 해봐야 겠지만이게 뭐니 뭐니해도 ...

$cl->setFieldWeights(array('tags' => 100000)); 

$cl->setSelect("*,IF(@weight>100000,1,0) AS matchtags"); 

$cl->SetSortMode(SPH_SORT_EXTENDED, 'matchtags DESC, @geodist ASC'); 
관련 문제