문제
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을 산출 할 것입니다.