2012-01-16 3 views
0

저는 개발중인 웹 응용 프로그램에 다국어 색인을 구현하려고합니다. 현재 몇 가지 언어, 영어, 말레이어 & 아랍어 에 레코드가 있습니다 (단, 서로 다른 열로 구분되어 있지 않습니다). 현재 영어 형태소 분석기 만 사용할 수 있습니다.Sphinx는 정렬에 따라 일관성없는 결과 집합을 반환합니다.

줄기와 비 줄기 색인에 대해 두 개의 색인 만 작성됩니다. 반환 된 결과 집합이 정렬 열에 따라 일관성이 없기 때문에 스템 핑 인덱스에 문제가 있습니다.

이 두 쿼리 (형태소 분석 된 인덱스에서)는 서로 다른 수의 전체 결과를 반환합니다. 그러나 그 차이는 정렬 순서뿐입니다.

SELECT * FROM test1stemmed WHERE MATCH('@institution universiti') GROUP BY art_id ORDER BY art_title_ord ASC; 

SELECT * FROM test1stemmed WHERE MATCH('@institution universiti') GROUP BY art_id ORDER BY art_title_ord DESC; 

그러나 동일한 쿼리가 스템 핑되지 않은 인덱스에서 실행 된 경우 결과 수가 동일합니다.

$sp = new SphinxClient(); 
$sp->SetServer('localhost', 9312); 
$sp->SetMatchMode(SPH_MATCH_EXTENDED); 
$sp->SetGroupBy('art_id', SPH_GROUPBY_ATTR, "$sp_sort_column $sort"); 
$sp->SetLimits($offset, $rows_per_page, 1000); 
$sp->Query("$q", 'test1stemmed'); 

내가 놓친 게 무엇 :

은 또한 스핑크스 PHP API를 사용하여 동일한 문제가 있어요? 여기 문서에서 놓친

답변

0

뭔가 http://sphinxsearch.com/docs/2.0.2/clustering.html

경고 : 그룹은 고정 된 메모리에서 수행되고, 따라서 그 결과는 대략적인; 실제로 존재하는 것보다 더 많은 그룹이 total_found에보고 될 수 있습니다. @count 또한 과소 평가 될 수 있습니다. 부정확성을 줄이려면 max_matches를 올려야합니다. max_matches가 발견 된 모든 그룹을 저장할 수 있으면 결과는 100 % 정확합니다.

그래서 max_matches의 값을 늘리면 해결할 수 있지만 매우 큰 값을 넣으면 절대적으로 바람직하지 않으므로 대신 쿼리를 수정해야합니다.

관련 문제