2016-08-08 2 views
2

시나리오는 여러 필드 값에 문서를 강화하는 것입니다SOLR 관련성 및 증폭 가장 좋은 방법

내가 필드 "Category"를 포함하는 값이 - "News", "image", "video", "audio"를.

지금 위에서 언급 한 필드 값에 근거하여 내가 그들에게 약간의 강화 (우선 순위)을 얻었다 " News"예를 들어 말씀을 전합니다 등등 " audio"및보다 " video"다음에 가장 높은 우선 순위를 가져옵니다.

카테고리와 마찬가지로 더 많은 필드가 있으며, 필드 값에 따라 같은 방식으로 증폭해야합니다.

Ex. 증폭 규칙이 너무

에 그래서 나는 해결책 Reference 건너 온 한 ...,

Category= News^1000 
Category= Image^900 
Premium_Contents = True^200 
Sponsored = True^300 

수 있습니다. 내 검색 관련 결과 집합을 계산하는 최선의 방법을 찾으려고합니다.

답변

3

예 링크가 적절하다고 생각합니다. 그것은 우리가 모든 검색에 부스트가 적용 원하기 때문에 우리가 사용하는 것입니다 우리는 귀하의 경우 예를 들어, 매우 자주 논리를 변경하지 마십시오 : -

이 경우
<requestHandler name="/select" class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="defType">edismax</str> 
     <str name="boost">product(
        map(query($type1query),0,0,1,$type1boost), 
        map(query($type2query),0,0,1,$type2boost))</str> 
      <str name="type1query">Category:"News"</str> 
      <double name="type1boost">1000.0</double> 
      <str name="type2query">Category:"Image"</str> 
      <double name="type2boost">900.0</double> 
    </lst> 
</requestHandler> 

쿼리 기능에 대한 점수를 반환 특정 쿼리. 뉴스, 이미지 등을 카테고리로 검색합니다.

map 함수에는 다음과 같은 서명이 있습니다. map (x, min, max, target, value)은 x 및 max를 포함하는 모든 x 값을 대상에 매핑합니다. min, max, target, value는 상수입니다. min과 max 사이에 있지 않으면 필드의 값 (또는 "value")을 출력합니다. 즉, 쿼리의 결과가 양수이면 (일치가있는 경우) 부스트 (1000,900 등)가 출력됩니다. 당신은 당신이 가지고있는 다른 순위 로직을 압도 할 수 있기 때문에 부스트 값으로 플레이해야합니다. 뉴스에서 더 잘 어울리는 뉴스 순위에서 가난한 검색 결과를 얻을 수 있습니다.

이러한 추가 기능을 사용하여 별도의 요청 처리기를 만들어 다른 검색을 위해 무시할 수 있습니다. 분명히 solrconfig를 변경하고 Solr을 다시 시작해야합니다. 변경 사항이 있으면 문제가 될 수 있습니다.

그렇지 않으면 bq (boost query) 매개 변수를보십시오. 실제로 내부적으로 이런 일을 생성

bq=Category:News^1000.0+Category:Image^900... 

boost(+*:* (Category:News^1000 + Category:Image^900)) 

이것은 부스트가 좋은 유연 검색 코드에서 수행하는 것을 의미한다. 개인적으로 나는이 작업 방식을 선호합니다.