문제

Rails 프로젝트에서는 Sphinx 플러그인과 함께 Sphinx를 사용하고 있습니다. 나는 속성이있는 테이블을 색인화합니다 : foo는 float입니다.

열을 정렬 할 때 원하는 동작 : foo는 nil 값이 항상 목록 끝에 나타납니다.

id; foo (order foo desc)
-------
1; 5
2; 3
3; -4
4: -5
5: nil
6: nil


id; foo (order foo asc)
-------
4: -5
3; -4
2; 3
1; 5
5: nil
6: nil

정상적인 SQL이라면 다음과 같이 정렬 할 것입니다.

:order => "(foo IS NULL) ASC, foo DESC"

그러나 널 값이 0으로 변환된다고 생각하기 때문에 불가능한 것 같습니다 (사실입니까?). 스핑크스 주문 표현식을 사용하는 것은 내 수레를 올바르게 정렬하지 않는 것 같습니다.

이 문제를 해결 한 사람이 있거나 어떻게 해야하는지에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

당신이 제공 한 솔루션은 내가 제안하는 것입니다. 그렇습니다. 그렇습니다. 스핑크스는 널을 0으로 취급합니다.

다른 팁

그 동안 제가 생각해 낸 한 가지 해결책은 다음과 같은 추가 속성을 색인하는 것입니다.

define_index do 
  indexes foo, :sortable => true
  has "foo IS NULL", :as => :foo_nil, :sortable => true
end

이런 주문을 할 수있는 것은 무엇입니까?

:order => "foo_nil ASC, foo DESC"

특히 이렇게 주문하고 싶은 속성이 많기 때문에 약간 서투른 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top