2017-12-26 6 views
0

제 문제를 설명하려고합니다. 여기에 학생 이름이 들어있는 각 문서에 "등록"이라는 다중 값 필드가 있다고 가정 해 봅시다.Solr - 다중 값 필드에서 OR 검색에 대한 최대 일치를 기준으로 결과 정렬

이제 Solr을 검색하는 동안 Manish, Amit, Navin이라는 3 명의 학생 이름을 검색합니다. 이제 Solr은이 이름 중 하나를 포함하는 모든 문서를 반환합니다 (이는 필자의 경우 분명히 필요함). 이제 일부 문서에는 그 중 3 개, 또는 2 개 또는 1 개가 모두있을 수 있습니다. 이 문서/결과를 순서대로 정렬하여 최대 일치가있는 문서가 맨 위에오고 그 다음에 더 적은 수의 일치를 정렬하도록합니다.

나는이 점수를 내림차순으로 추가하려고했지만 일치하는 모든 문서에 대해 점수가 "1"이기 때문에 원하는대로 작동하지 않습니다.

내 다중 값 필드의 최대 일치 개수를 기준으로 정렬 순서를 어떻게 잡을 수 있습니까?

+0

검색어는 어떤 모양입니까? – MatsLindh

+0

실제 숫자는 롤 번호입니다. 그러나 주어진 예제에있는 방법입니다. - curl http : // localhost : 8983/solr/XYZ/query -d '{ "query": "enrollment : Amit Manish "sort": "score desc"} '' – Manish

+0

점수가 정수로 계산되지 않기 때문에 정말 중요합니다. 귀하의 질문에 토큰 화 된 텍스트 필드가 있다면 점수 계산이 다릅니다. Solr에게 주어진'query' 매개 변수도 없습니다 (정규 질의는'q'를 통해 주어집니다). 질문을 할 때, 당신이 해결하려고하는 것과 같은 질문이 중요합니다. 대신에 찾으려는 각 값에 대해 boost 쿼리를 사용하여 실제 문제를 해결할 수 있습니다 ('bq = field : value & bq = field : value2'). – MatsLindh

답변

1

일치하는 수를 기준으로 문서의 순위를 지정하려는 다중 값 정수 필드가있는 경우 각 일치 항목에 대해 부스트 쿼리를 적용하십시오. 예를 들어 크기가 다른 일련의 모니터가있는 경우 유효한 각 크기에 대해 부스트를 적용 할 수 있습니다 (예를 들어 해킹하여 하이텍 코어의 예제 문서와 함께 테스트 한 결과, 그것으로 고집한다.) 두 개의 관련 문서가 있습니다. 하나는 VA902B이고 다른 하나는 sizes이며 값이 23, 28 및 32 인 다중 값 필드로 제공되고 하나는 3007WFP이며 동일한 필드에는 값이 23, 29, 36입니다. 여기

나는 모든 문서를 요구하지만, 나에게 상단의 모두 사이즈 28 사이즈 (23)가 그 사람들을 제공하고있어 다음 중 하나 사이즈 28 사이즈 23, 후 다른 문서가 그들 :

?bq=sizes:28&bq=sizes:23&defType=edismax&q=*:* 

내가 크기 중 하나를 일치 만에 문서의 집합을 제한하려면, 내 주 쿼리로 것을 사용할 수 있습니다

?defType=edismax&q=sizes:(23%2028) 

..이 내가 당신의 가정 발견 어디 일치 횟수에 관계없이 점수가 동일하다는 것은 거짓입니다. - 당신이 원하는 행동이 SOLR에 대한 표준 동작입니다

"explain": { 
    "VA902B": "\n2.0 = sum of:\n 1.0 = sizes:[23 TO 23]\n 1.0 = sizes:[28 TO 28]\n", 
    "3007WFP": "\n1.0 = sum of:\n 1.0 = sizes:[23 TO 23]\n" 
},  

.. 부스트를 적용하기위한 필요가 없음을 의미한다 : URL에 &debugQuery=true을 추가하는 것은 우리에게 각 문서에 대한 세부 점수 정보를 제공합니다. 이것은 처음 생각 이었지만 댓글에 준 검색어에 대한 정확한 대답을 제공해야합니다.

하지만 난 당신이 부스트를 적용 내 전략뿐만 아니라 일한 얼마나 보여 드리겠습니다 :

?bq=sizes:28&bq=sizes:23&defType=edismax&q=sizes:(23%2028)&debugQuery=true 

.. 지금은 1.0을 기록됩니다 이후 각 문서의 점수를 두 배로 효과적으로 것을 우리에게 알려줍니다 (쿼리에서) +1 (부스트에서) 각 일치합니다.

"explain": { 
    "VA902B": "\n4.0 = sum of:\n 2.0 = sum of:\n 1.0 = sizes:[23 TO 23]\n 1.0 = sizes:[28 TO 28]\n 1.0 = sizes:[28 TO 28]\n 1.0 = sizes:[23 TO 23]\n", 
    "3007WFP": "\n2.0 = sum of:\n 1.0 = sum of:\n 1.0 = sizes:[23 TO 23]\n 1.0 = sizes:[23 TO 23]\n" 
}, 

는 또한 표준 루씬 쿼리 파서 (그리고 dismax/edismax bq을 지원하는)로 q=sizes(23 28) 쿼리를 테스트 및 동작은 동일했다.

+0

흥미 롭습니다! 결과를 다시 확인하고 곧 내 결과를 알려 드리겠습니다. – Manish

+0

이것은'fl = score, doc_id'로 검색 할 때 얻는 것입니다 -> '[{score ": 1.0,"doc_id ":"2173763 "}, {"score ": 1.0,"doc_id "," "1016369"}, { "score": 1.0, "doc_id": "1852970"}, ....]' – Manish

+0

흥미로운 부분은 문서에 대한 debugQuery의 내용, _exact_ 쿼리 문자열이 Solr 관리자 패널 아래에서 로깅을 늘리면 Solr이 모든 쿼리를 처리하도록 표시 할 수 있으며 검색중인 필드의 필드 정의는 무엇입니까? – MatsLindh

관련 문제