2013-07-18 1 views
0

인덱스에 정렬 된 필드가 있습니다 (예 : lexographical String). 높은 값에 더 높은 부스트 ​​/ 스코어를주고 싶습니다.인덱싱 된 필드를 기반으로 한 부스트

Lucene 4에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

은 (구글이 루씬의 이전 버전에 도달하지만, API는 인덱싱 시스템에 큰 개선을 실질적으로 변경의 plently 있습니다.)합니다 (IndexCache에 히트를 통해 정확한 값을 획득하는 것은 차선책이다)

+0

단순히 필드 값을 정렬하는 것으로 충분하지 않다고 생각합니까? 또한이를 위해 필드 레벨 (즉, 인덱스 시간)을 사용하는 것이 허용 가능한가? – femtoRgon

+0

현재 색인 시간 증가 기능을 사용하고 있습니다 (하지만 여러 가지 이유로 정기적으로 색인을 다시 생성하기 때문에 (예 : '최근'문서를 부스트하기 위해). 나는 당신이 "현장의 가치를 정렬"하는 것을 의미하는지 모르겠습니다. 필드의 자연 인덱스 순서를 사용하는 방법이 있다면 완벽 할 것입니다. 실제로 문서를 보는 것을 피하는 것이 중요합니다 (효율적인 Lucene 쿼리와 마찬가지로). – fommil

+0

인덱스 부스트를 할 때 삽입 속도가 크게 저하되는 것을 지적했습니다. Lucene 4에서 인덱스 시간 증폭이란 모든 인덱싱 가능 필드를 반복하여 수동으로 증폭하는 것을 의미합니다. – fommil

답변

1

SortIndexSearcher.search으로 호출하여 필드 값을 사 전적으로 정렬 할 수 있습니다. 다음 관련 항목 별, 주어진 필드의 사전 식 순서에 먼저 정렬합니다

SortField primarySort = new SortField("field", SortField.Type.STRING); 
Sort sort = new Sort(primarySort, SortField.FIELD_SCORE); 
searcher.search(query, hits, sort); 

. Sort을 구성 할 때 원하는만큼 정렬 필드를 추가 할 수 있습니다.

+0

흠, 재미 있지만 너무 제한적입니다. 나는이 분야가 결과의 순서를 지배하기를 원하지 않는다. 여러 개의 히트가 같은 점수를 가질 때 선택한 필드의 (역순) 자연 순서를 사용하여 승자를 선택할 수있는 '정렬'을 구성 할 수 있습니까? – fommil

+1

예. Sort에 전달 된 인수의 순서는 우선 순위를 결정합니다. 'new Sort (SortField.FIELD_SCORE, primarySort);'는 관련성에 따라 먼저 정렬 한 다음 필드 값으로 정렬합니다 (점수가 같은 경우). – femtoRgon

+0

이것은 정확히 내가 찾던 해답이 아니지만 그것을 표시하는 것으로 충분합니다. 아마도 다른 사람들에게 도움이 될 것입니다 (주문에서 진정한 점수를 얻는 방법을 찾고있었습니다. 전후에 득점을 생각한 것입니다.) – fommil

관련 문제