2017-12-13 6 views
0

하나의 필드가 아닌 다른 필드보다 일치하는 필드의 우선 순위를 찾는 검색을 만들고 싶습니다. 모든 필드는 동일한 부스트 값을 가지며 최종 스코어는 합계 필드 부스트로 계산되어야합니다.여러 필드의 합계로 최종 점수 얻기 부스트

class Event < ApplicationRecord searchable do text :title text :category text :artist_name end end

은 가정하자 나는 두 개의 이벤트가 있습니다 :

을 전체 텍스트가 두 개의 필드와 일치하고 각 필드가 후원 한이있는 경우, 최종 점수는 1 + 1 = 2

는 예를 들어 보겠습니다 것

이벤트 1 :이름 : "크리스마스 축제"아티스트 이름 : "AC는/DC"

이벤트 2 :이름 : "새 해 축제"아티스트 이름 : 사용자 검색이 그냥 "축제", 두 이벤트가 동일한 점수를 반환하는 경우 "여왕"

그래서, 그것은 모두 일치하기 때문에 이벤트 이름 그러나 사용자가 "festival AC/DC"를 검색하면 이벤트 이름 1 (축제) 및 아티스트 이름 (AC/DC)과 일치하므로 이벤트 1 또는 이벤트 1을 반환하고 싶습니다. . 이벤트 2은 이벤트 이름 (축제)과 일치합니다. 2 점수는 1

내가 그렇게 할 수있는 방법에 대한 어떤 제안을해야 2 이벤트 동안 이벤트 1 점수는되어야 하는가? 이것은 가능한가?

+0

훌륭합니다, 당신의 질문은 무엇입니까? – Unihedron

답변

0

득점 및 부스팅이 섞여있는 것 같습니다. 귀하의 질문에 제목이 있어야합니다. 각 필드 점수를 합산하여 총점을 계산하십시오 (부스트와 상관없이).

필드 점수는 필드 일치를 기반으로 계산되며 임의의 가산 또는 곱셈 부스트 집합 (함수 및/또는 일치하는 하위 쿼리)에 적용 할 수 있습니다. 그러나 결국 원하는 것은 부스트 ​​자체가 아닌 각 필드 스코어를 합산하여 글로벌 스코어를 계산하는 것입니다.

타이 매개 변수가 훨씬 덜 뭔가 해야 부동 소수점 값을 (지정 : 예를 들어

DisMax 쿼리 파서는 정확하게 당신이 tie (타이 브레이커) 매개 변수를 사용하여 최종 점수가 계산되는 방법을 제어 할 수 있습니다 1) DisMax 쿼리에서 tiebreaker로 사용합니다.

사용자가 입력 한 단어를 여러 필드에 대해 테스트하면 필드가 두 개 이상 일치 할 수 있습니다. 그렇다면 각 필드는 해당 단어가 해당 필드에 얼마나 일반적인지에 따라 다른 점수를 생성합니다 (각 문서는 다른 모든 문서와 비교하여 ). tie 매개 변수를 사용하면 에서 가장 낮은점수 필드와 비교하여 낮은 점수 필드 점수로 의 영향을받는 쿼리의 최종 점수를 제어 할 수 있습니다.

값이 "0"입니다.0 "- 기본값 - 쿼리를 순수한"disjunction max query "로 만듭니다. 즉, 최대 점수 하위 쿼리 만이 최종 점수 인 에 기여합니다. 값이"1.0 "이면 쿼리가 순수한"disachunction sum query " 어디는 최종 점수가 하위 쿼리 점수의 합이되기 때문에 최대 점수 하위 쿼리 이 무엇인지는 중요하지 않습니다. 을 일반적으로 낮은 값을, 같은 0.1로 유용합니다.

당신의 상황에서 분리 총계 쿼리이 필요하므로 tie1.0으로 설정하고 싶을 수도 있습니다.

+0

매우 명확한 설명, 시간 내 주셔서 감사합니다. –