문제

solr의 날짜 필드별 부스팅은 다음과 같이 정의됩니다.

{!boost b=recip(ms(NOW,datefield),3.16e-11,1,1)}

여기저기 찾아봤습니다(예: 부스트 점수를 위한 Solr Dismax 구성 그리고 다중값 날짜 필드에 대한 Solr 부스트 그리고 그들은 모두 다음을 참조합니다. Solr관련성FAQ), 동일한 정의가 사용됩니다.그러나 나는 이것이 내 결과를 충분히 향상시키지 못한다는 것을 발견했습니다.이 날짜 부스팅을 어떻게 더 강하게 만들 수 있나요?

사용자가 두 개의 키워드를 검색하고 있습니다.두 항목 모두 제목과 설명에 두 키워드(동일한 순서)가 포함되어 있습니다.키워드 중 어느 것도 반복되지 않습니다.

그리고 solr 디버그 출력은 문제를 이해하기에는 너무 혼란스럽습니다.

이제 이것은 큰 문제가 아닙니다.99%의 쿼리가 제대로 작동하고 예상한 결과를 생성하므로 solr이 전혀 작동하지 않는 것과는 달리 매우 혼란스럽고 진행 방법을 모르는 이 상황을 발견했습니다.

도움이 되었습니까?

해결책

사용자가 두 개의 키워드를 검색하고 있습니다.두 항목 모두 제목과 설명 모두에 두 키워드 (동일한 순서)를 포함합니다.키워드 중 어느 것도 반복되지 않습니다.

글쎄요, 귀하의 예를 보면 귀하의 결과가 tie 상황.이 문제를 이해하려면 혼란스러운 출력을 디버그하고 타이 브레이커 정책을 이해하는 것이 중요합니다. dismax.

와 함께 DisMax 쿼리에서 사용자 입력의 다양한 용어가 여러 필드에 대해 실행됩니다(해당 용어 중 다수가 적중하는 경우)(해당 용어는 동일한 필드의 다른 필드에 나타남). document) 더 높은 점수를 받은 적중이 사용되지만 그 안에 적중된 다른 하위 쿼리는 어떻게 되나요? document 기간 동안?글쎄, 그게 바로 그거야 tie 매개변수가 정의합니다. DisMax 용어 쿼리에 대한 점수는 다음과 같이 계산됩니다.

score= [score of the top scoring subquery] + tie * (sum of other hitting subqueries)

결과적으로, tie 매개변수는 0에서 1 사이의 값으로, Dismax 최대 히트만 고려합니다. score 기간 동안(설정 tie=0), 해당 용어에 대한 모든 조회수(설정 tie=1) 또는 그 두 극단 사이의 것.

그만큼 boost 매개변수는 다음과 매우 유사합니다. bf 매개변수를 사용하지만 결과를 최종 점수에 추가하는 대신 결과를 곱합니다.이는 다음에서만 사용할 수 있습니다. 확장된 Dismax 쿼리 파서 아니면 그 루시드 쿼리 파서.

흥미로운 기사가 ​​있어요 부스트 방법 비교 당신에게 유용할 수 있는 SOLR의

이 답변에 대한 참고 자료:

시시르

다른 팁

레시피(x, m, a, b) 구현하다 f(x) = a/(xm+b) 와 함께 :

  • x :ms 단위의 문서 수명은 다음과 같이 정의됩니다. ms(NOW,<datefield>).

  • m :부스트를 적용하는 데 사용되는 시간 척도를 정의하는 상수입니다.이는 오래된 문서의 연대를 기준으로 해야 합니다( 참조_시간) 밀리초 단위입니다.예를 들어, 참조_시간 1년(3.16e10ms)은 역수를 사용함을 의미합니다. 3.16e-11 (1/3.16e10 반올림).

  • a 그리고 b 상수입니다(임의로 정의됨).

  • xm = 1 문서가 1일 때 참조_시간 이전 (승수 = a/(1+b)).
    xm ≈ 0 문서가 새 문서인 경우 값은 다음과 같습니다. a/b.

  • a와 b에 동일한 값을 사용하면 최근 문서에서 승수가 1을 초과하지 않습니다.

  • 와 함께 a = b = 1, 1 참조_시간 이전 문서의 승수는 약 1/2, 2입니다. 참조_시간 이전 문서의 승수는 약 1/3입니다.

데이트 부스팅을 강하게 만드는 방법은 무엇입니까?

  • 증가하다 m :더 낮은 것을 선택하세요 참조_시간 예를 들어 6개월이면 m = 6.33e-11.1년 참조와 비교하여 문서 기간이 증가함에 따라 승수는 2배 더 빠르게 감소합니다.

  • 감소 a 그리고 b 함수의 응답 곡선을 확장합니다.이는 매우 공격적일 수 있습니다. 이 예 (8페이지).

  • 다음을 사용하여 부스트 기능 자체에 부스트를 적용합니다. bf (부스트 기능) 매개변수(이것은 dismax 매개변수이므로 DisMax 또는 eDisMax 쿼리 구문 분석기를 사용해야 함), 예::

    bf=recip(ms(NOW,datefield),3.16e-11,1,1)^2.0
    

몇 가지 사항에 유의하는 것이 중요합니다.

  • bf 이다 첨가물 촉진하고 역할을 한다. 보너스 최신 문서의 점수에 추가되었습니다.

  • {!boost b}곱셈 부스트하고 더 많은 역할을합니다. 패널티 이전 문서의 점수에 적용됩니다.

  • BF 점수(전체 점수에 추가된 "보너스")는 관련성 점수(전체 점수)와 독립적으로 계산됩니다. 즉, 점수가 높은 결과 집합은 점수가 낮은 결과 집합만큼 영향을 받지 않을 수 있습니다.대조적으로, 곱셈 부스트(multiplicative Boost)는 결과 세트 관련성에 관계없이 동일한 방식으로 점수에 영향을 미치므로 일반적으로 선호됩니다.

  • 사용하지 마세요 recip() 둘 이상의 날짜에 대해 참조_시간 그렇지 않으면 음의 값이 나올 것입니다.

Nolan Lawson이 작성한 매우 통찰력 있는 게시물도 참조하세요. Solr의 부스트 방법 비교.

reciprocalfloatfunction 부스트 레시피가 작동하는 방식에 대한 명확한보기를 제공합니다.dismax가 부스트에 대한 충분한 제어 기능을 제공하지 않으면 BoostQParserPlugin로 땜질을해야합니다.

3.16e-11의 승수가 밀리 초에서 수년까지 단위를 변경합니다. (연간 약 3.16e10 밀리 초가 있으므로).따라서, 매우 최근 날짜는 1 / (0 + 1) 또는 1 년에 가까운 값을 얻을 수 있습니다. 과거는 약 1 / (1 + 1) 또는 1/2의 배율을 얻을 것이고 2 개의 날짜 년은 1 / (2 + 1) 또는 1/3을 산출 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top