2012-10-05 4 views
2

우리는 Solr 3.6을 실행 중이며 결과 집합에 조건부 정렬을 적용하려고합니다. 명확히하기 위해 데이터는 입찰가 세트이며 현재 사용자의 입찰가로 정렬하기위한 옵션을 추가하여 일반 정렬 기능을 수행 할 수 없습니다 (입찰가는 쿼리를 실행하는 각 사용자마다 다르기 때문에). 결과 집합의Solr에서 조건부 정렬 3.6

서류는 "CurrentUserId"와 "CurrentBid"필드를 포함, 그래서 우리가 정렬하는 다음과 같은 필요가 있다고 생각 :

종류 = (? (CurrentUserId = 12345) CurrentBid : 0) 내림차순

이는 의사,하지만 아이디어는 SOLR의 currentUserId 사용자 ID (이 예에서는 12345)에 일치하는 경우, 그 종류 CurrentBid로, 그렇지 않으면 그냥 일처럼 보인다 0

를 사용한다는 것입니다 질의에 의한 정렬은 (또는 최소한 솔루션의 일부를 형성하는) 달성과 함께 갈 수있는 방법 일 수 있습니다. NG 쿼리 :

http://localhost:8080/solr/select/?q=:&sort=query(CurrentUserId:10330 AND CurrentBid:[1 TO *])+desc

이 비록 나를 위해 작동하는 것,하지 않고 다음과 같은 오류가 발생합니다 :

sort param could not be parsed as a query, and is not a field that exists in the index: ...

Solr documentation 쿼리 기능을 사용할 수 있음을 나타냅니다 Solr 1.4 이후부터 정렬 매개 변수로, 그래서 이것이 작동 해야하는 것 같습니다.

이 문제를 해결하는 방법에 대한 조언은 크게 감사하겠습니다.

답변

3
제공된 SOLR 문서 링크에 따르면

, 예를 기반으로

Any type of subquery is supported through either parameter dereferencing $otherparam or direct specification of the query string in the LocalParams via "v".

그래서 당신의 쿼리, 내가 한 생각하거나 다음의 두 작동합니다 :

http://localhost:8080/solr/select/?q=:&sort=query($qq)+desc&qq=(CurrentUserId:10330 AND CurrentBid:[1 TO *])

http://localhost:8080/solr/select/?q=:&sort=query({v='CurrentUserId:10330 AND CurrentBid:[1 TO *]'})+desc

+0

그게 효과가 있었고 해결책에 조금 더 가까워졌습니다. 아직 입찰가가 정렬 순서에 영향을 미치는 요인을 파악해야하지만,이 답변을 좋은 시작으로 받아 들일 수는 있습니다. 당신의 도움을 주셔서 감사합니다. – Mun