2011-01-04 7 views
2

SolrNet을 사용하여 solr 색인에 액세스했습니다. 전체 결과 집합을 반환하지 않고 결과에서 특정 문서의 색인 (위치)을 검색하고 싶습니다.Solr 검색 결과 및 문서 위치 검색

자세히 ... 쿼리는 ~ 30,000 개의 문서를 반환하며 정수 필드에 의해 정렬됩니다. 고유 한 키 필드에는 Guid가 포함되어 있으며 처음 10 개 결과 만 반환하면서 고유 키를 기반으로 특정 문서가있는 위치를 찾고 싶습니다.

이 색인은 원래 일반 Lucene으로 구현되었으며,이 작업은 두 개의 쿼리 (하나는 알고 싶은 문서의 lucene doc id를 얻은 다음 하나는 전체 결과 집합을 반환)로 구현되었습니다. 그런 다음 doc id를 사용하여 문서가 전체 결과 집합에 나타나는 위치를 찾은 다음 첫 번째 문서 만 열거합니다.

반환하지 않고 Solr을 사용하여 달성 한 방법이 있습니까? 모든 30000 결과 (심지어 Guid에만 제한이 너무 느린 것)?

감사 즉

+1

이걸로 뭘하고 싶니? 진짜 근본적인 문제는 무엇입니까? –

+0

Lucene doc ID는 구현 세부 사항이며 Solr은이를 노출하지 않습니다. –

+0

결과는 숫자가 매겨진 "points"필드가있는 페이지 매김 된 사용자 목록을 나타냅니다. 결과는이 "점수"필드에 의해 정렬되어야하며 결과 X에 나타나는 사용자 X의 위치를 ​​알아야합니다. 그래서 페이지가 매겨진 목록 위에 "You 're in third place"또는 "You 're in 321st place"라고 표시 할 수 있습니다. 현재 사용자가 결과의 첫 번째 페이지에 있으면 좋지만 문제가 아닌 경우 문제가 발생합니다. 감사. – robinbetts

답변

5

위의 사용자 수를 얻을 수있는 낮은 수준의 사용자 지점을 포함하여 범위 쿼리로 할 수 있다고 생각합니다. 패싯 범위 접근법을 사용하여 명시 적 쿼리를 수행하거나 해당 정보를 얻을 수 있습니다.

사용자 점수가 10.000 인 경우 쿼리 : 게임 : 테트리스 점수 [MaxInt TO 10000]를 사용할 수 있으며 결과가 375이면 사용자의 순위가 375임을 알 수 있습니다.

+0

Genius! 그게 내가 필요한 것입니다. 나는이 문제를 포기하고 1 개월 후 다시 문제를 풀어 보았습니다. 내 질문은 Google에 올라 왔고 전에 보지 못했던 당신의 반응을 보았습니다. 감사! – robinbetts

0

나는 인덱스 시간에 순위를 구축하고 생각할 수있는 유일한 신뢰할 수있는 방법은 "순위"정수 필드가 있고 인덱스를 빌드 할 때 채 웁니다. 단점은 모든 업데이트마다 전체 인덱스를 다시 작성해야한다는 것입니다.

Lucene doc ids가 안정적이지 않으므로 참조 용으로 사용하지 마십시오 (this, this, this 참조). Solr이 어쨌든 노출하지 않습니다.