2013-07-10 1 views
0

나는 스핑크스 검색 엔진을 개선하여 내 ebsite 성능을 향상시키기 때문에 새로운 mysql 쿼리를 새로운 스핑크스 언어로 변환하려고합니다.스핑크스 검색 필드 간의 연산

요점은 게시물에 대한 투표와 각 투표에 주어진 점수 (1에서 5까지) 사이의 수학 연산을 기반으로 결과를 정렬하는 것입니다.

예를 들어, 게시물에 대해 3 표를 얻었고 1 = 5 점 2 = 3 점 및 3 = 2 점인 경우, 내 표에는 정수 = 3 (votes = 3)의 투표라는 필드가 포함됩니다) 및 5 + 3 + 2 (점 = 10)의 정수 필드가 있습니다. 이로 인해 게시물에 대한 최종 평가가 점/투표 할 것이다 이것에

,이 예에서 10 = 3333/3 ...

내가 목록을 가져올 수 스핑크스 API를 사용하고 가정이 될 것입니다

mysql_query("SELECT * FROM table ORDER BY points/votes DESC LIMIT $start,$stop"); 

내가 스핑크스의 쿼리를 작성하려고하지만, 작업 항상 0 결과를 제공하지 않습니다 : 최고 내림차순으로 게시물을 평가, 이는 내가 내 PHP 스크립트에 있던 기존 MySQL의 쿼리입니다. 내가 한 모든 시도를 설명하는 // 주석이 달린 행을 읽으십시오.

require("sphinxapi.php"); 
$cl = new SphinxClient; 
$index = index; 
$cl->setServer("localhost", 9312); 
$cl->SetMatchMode(SPH_MATCH_FULLSCAN); 
//$cl->SetSortMode(SPH_SORT_EXTENDED, 'IDIV(points,votes) DESC'); //not working 
//$cl->SetSortMode(SPH_SORT_EXTENDED, '(points DIV votes) DESC'); //not working 
//$cl->SetSortMode(SPH_SORT_EXTENDED, 'points/votes DESC'); //not working 
//$cl->SetSortMode(SPH_SORT_EXTENDED, '(points/votes) DESC'); //not working 
$cl->setLimits($start,$stop,$max_matches=1000); 
$query = ""; 

무엇이 잘못되었는지 확인해주세요. 감사합니다.

+0

산술 표현식을 사용하려면'SPH_SORT_EXPR'을 사용해야합니다. – DevZer0

+0

이미 SPH_SORT_EXPR을 시도했으며 제로 결과를 얻었습니다. – Sevy

+0

정렬에 영향을 미치지 않습니다. 정렬 결과가 어떻게 0이됩니까? – DevZer0

답변

0

당신은 첫째로 당신이 Attributes, NOT fields로 포인트 투표를 필요로 SPH_SORT_EXPR

$cl->SetSortMode(SPH_SORT_EXPR, '(points/votes) DESC'); 
+0

나는 이미 SPH_SORT_EXPR을 시도했는데 실제로 결과가 0 점이되었다. – Sevy

0

사용해야합니다. 속성은 인덱스에 저장되어있는 등 산술는 숫자 속성 (문자열이 아니라)에서 수행 할 수있는 정렬에 사용할 수 있습니다

(이미 속성을 가지고 가정) SPH_SORT_EXPR에 대한 올바른 구문은 것

$cl->SetSortMode(SPH_SORT_EXPR, 'points/votes'); 

SPH_SORT_EXPR은 항상 내림차순이므로 DESC가 필요 없습니다.

하지만 스핑크스가 매 시간마다 그 비율을 계산하는 대신 sql_query 동안 계산을 더 잘 수행하고 단일 숫자 속성으로 저장하는 것이 좋습니다. 팁 : 플로팅하지 않고 정수로 저장하십시오. 정수는 정렬 기준으로보다 효율적입니다.