2013-02-03 1 views
1

특정 필드에서 명시 적으로 일치하는 문서가 먼저 반환되고 다른 일치하는 문서가 오름차순으로 반환되도록 내 쿼리의 결과를 정렬하거나 채점하는 방법을 결정하려고합니다. SOLR의 공간 튜토리얼에 사용 된 예제를 따라Solr 공간 검색 - 문서를 먼저 명시 적으로 일치시킨 다음 거리별로 정렬하려면 어떻게합니까?

,의 난이 (의사) 같은 것을 보이는, 몇 상점을 가정 해 봅시다 :

<Store> 
    <Id>1</Id> 
    <Coords>10,-15</Coords> 
    <PostalCode>12345</PostalCode> 
    <ServiceArea> 
    <PostalCode>12345</PostalCode> 
    <PostalCode>23456</PostalCode> 
    </ServiceArea> 
</Store> 

<Store> 
    <Id>2</Id> 
    <Coords>11,-16</Coords> 
    <PostalCode>23456</PostalCode> 
    <ServiceArea> 
    <PostalCode>12345</PostalCode> 
    <PostalCode>23456</PostalCode> 
    </ServiceArea> 
</Store> 

그래서, 두 개의 저장합니다. 각자는 자신의 우편 번호를 사용하며 각 우편 번호는 서로의 우편 번호를 서비스합니다. 지금은 효과에 뭔가를 조회 할 :

Find stores which service PostalCode 12345 
Ordered by stores in PostalCode 12345 first 
Then ordered by ascending distance from PostalCode 12345 

은 내가 StandardQueryParser를 사용하여이를 유지하기 위해 노력하고있어 및 강화하는 것은 관여 경우는 오히려 지수보다 쿼리에 정의 될 필요가있다.

정렬 사양

답변

2

에게 사용 :

종류 = 쿼리 ({! 필드 F =을 PostalCode의 V = 12345}) 제품 설명, geodist() + 오름차순

할 수 있습니다 종류에 필드, 점수 및 함수 쿼리 함수 쿼리는 많은 가능성을 열어 놓고 위에서 보았 듯이 "query()"함수 쿼리가 더 많이 열립니다. query()는 그 안에 쿼리의 점수를 반환합니다.이 경우 쿼리는 특정 값을 가진 필드를 검색합니다. 필자는 '필드'쿼리 구문 분석기를 사용하기로 결정했으나 {! v = "PostalCode : 12345"}뿐입니다.

그런데 'pt'및 'sfield'와 같이 geodist()의 다른 매개 변수를 잊지 마십시오.

관련 문제