스핑크스 주문 : NIL/NULL 값이 마지막입니다
-
06-07-2019 - |
문제
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"
특히 이렇게 주문하고 싶은 속성이 많기 때문에 약간 서투른 것입니다.
제휴하지 않습니다 StackOverflow