2012-02-29 6 views
0

별도의 스키마가있는 여러 Solr 인스턴스가 있습니다.필드 값에 따라 Solr 다중 값 필드 정렬

정렬 된 순서로 다중 값 입력란을 받아야합니다. 예 : 그래서 train_station, 공항, city_district 및 : 유형

q=köln&sort=query({!v="type:(airport OR train_station)"}) desc 

나는 train_station 유형 전에 공항 유형의 문서를보고 싶습니다. 지금 나는 항상 train_station 타입을 정상에 얻고있다.

어떻게 작성해야합니까?

답변

6

IDF로 인해 상단에 train_station이 표시됩니다.

빠른 해킹은 범위 쿼리 (일정한 점수를 갖는 이점이 있습니다)와 쿼리 부스트를 사용하는 것입니다 : q=köln&sort=query({!v="type:([airport TO airport]^3 OR [train_station TO train_station]^2)"}) desc.

이 방법은 자신의 유형 필드에서 airport이 문서는 유형 필드에서 train_station이 문서가있을 것이다 자신의 필드 유형에 airporttrain_station이이 개 문서의 점수를해야합니다, 3의 점수가됩니다 점수 2 + 3 = 5 (곱셈 상수로).

이 작업을보다 우아하고 효과적인 방법으로 사용자 지정 쿼리 파서 (또는 함수 쿼리)를 작성하는 것이 좋습니다.

+1

영리한 빠른 해킹입니다. –

+0

"type : (airport^3 OR train_station^2)"과 같이 간단한 비교 대신 범위를 선택하신 이유는 무엇입니까? – rounak

+1

부스트를해도 IDF는 여전히 고려됩니다. 귀하의 질의를 통해 train_station이 공항보다 훨씬 더 희박한 경우, 공항을 포함하는 문서보다 더 높은 점수를 얻게됩니다. – jpountz

0

필드 자체 내에서 항목을 정렬하려면 원하는 순서대로 색인을 생성하거나 사후 처리를 수행해야합니다. Solr의 정렬은 문서 만 정렬합니다!

1

문서 당 단일 값을 반환하는 경우에만 함수를 정렬 할 수 있습니다. multiValued 필드 나 토큰 화 된 필드는 확실히 정렬 할 수 없습니다. 필드에 "공항"이 포함되어 있으면 "공항"("기차역"이 포함 된 경우에도)을 반환하고 "공항"이 아닌 "기차역"이 포함 된 경우 "기차역"을 반환하고 정렬을 수행해야하는 것처럼 보입니다. 그걸로.

또 다른 옵션은 인덱스 시간에 처리하는 것입니다. 필드에 "공항"이 포함되어 있으면 1을 반환하고 필드에 "기차역"이 있지만 공항이 아니라면 2를, 공항에 포함되어 있지 않으면 3을 반환하는 "airport_train_station_sort"라는 필드를 추가하십시오. 그런 다음 해당 필드를 정렬하십시오.

1

SOLR 내부에서이 문제를 해결할 수 없습니다. 설명서를 확인하면 SOLR이 다중 값 필드를 정렬하지 않습니다. SOLR의 이전 버전을 사용해 보았지만 결과는 예측할 수 없었습니다.

스키마를 변경하고이 정렬 데이터를 단일 값 인덱싱 된 필드에 넣거나 먼저 공항, 도시 구역, 기차역에 대한 여러 쿼리를 작성해야합니다.