Lucene 점수에 관한 질문이 있습니다. 색인에 두 개의 문서가 있는데, 하나는 "내 이름"이고 다른 하나는 "내 이름"입니다. "my name"이라는 키워드를 검색하면 두 번째 문서가 첫 번째 문서 위에 나열됩니다. 필자가 입력 한 정확한 키워드가 문서에 포함되어 있으면 먼저 나열하고 그 다음에 다른 문서를 나열해야합니다. 누구든지이 일을하는 방법을 도울 수 있습니까? 감사.Lucene 채점에 관한 질문
답변
두 번째 시도 : Lucene의 기본 동작은 사용자가 요구하는 것이어야합니다. 여기서 중요한 요소는 점수의 일부인 lengthNorm()입니다. 이보다 짧은 문서보다 더 긴 문서는 점수가 부과되는 경우가 있습니다. 문맥에 대해서는 Lucene's Similarity API을 참조하십시오. 예를 들어, 두 개의 히트에 대해 lengthNorm이 동일하다면, 그들은 임의로 정렬됩니다.
explain() 기능은 문서가 원래대로 표시되는 이유를 확인하는 데 도움이됩니다.
나는 당신이 BooleanQuery를 사용하고 있다고 가정합니다. 귀하의 질의가 공식화 된 정확한 방법을 게시하면 더 말할 수있을 것입니다. Query Parser Syntax도 참조하십시오. 이것이이 마크에 더 가깝기를 바랍니다.
명령 줄에서 lucli를 사용하는 경우 (최신 Lucene 소스를 다운로드하고 contrib 디렉토리에 있음) "설명"명령을 사용하여 Lucene이 왜 점수를 매겼는지 설명 할 수 있습니다. ------------ 0.6089077 :
---------------- 2 점수 :
그것은이 같은 뭔가 나올거야 ---------
(ㅋ ㅋ ㅋ ㅋ 문서)
Explanation:4.260467 = (MATCH) sum of:
0.59024054 = (MATCH) weight(description:warwick in 276780), product of:
0.05595057 = queryWeight(description:warwick), product of:
5.2746606 = idf(docFreq=13531, numDocs=843621)
0.010607426 = queryNorm
10.549321 = (MATCH) fieldWeight(description:warwick in 276780), product of:
1.0 = tf(termFreq(description:warwick)=1)
5.2746606 = idf(docFreq=13531, numDocs=843621)
2.0 = fieldNorm(field=description, doc=276780)
0.832554 = (MATCH) weight(keywords:warwick in 276780), product of:
0.066450186 = queryWeight(keywords:warwick), product of:
6.264497 = idf(docFreq=5028, numDocs=843621)
0.010607426 = queryNorm
12.528994 = (MATCH) fieldWeight(keywords:warwick in 276780), product of:
1.0 = tf(termFreq(keywords:warwick)=1)
6.264497 = idf(docFreq=5028, numDocs=843621)
2.0 = fieldNorm(field=keywords, doc=276780)
0.19180772 = (MATCH) weight(url:warwick in 276780), product of:
0.048220757 = queryWeight(url:warwick), product of:
4.5459433 = idf(docFreq=28043, numDocs=843621)
0.010607426 = queryNorm
3.9777002 = (MATCH) fieldWeight(url:warwick in 276780), product of:
1.0 = tf(termFreq(url:warwick)=1)
4.5459433 = idf(docFreq=28043, numDocs=843621)
0.875 = fieldNorm(field=url, doc=276780)
0.023709858 = (MATCH) weight(content:warwick in 276780), product of:
0.03373665 = queryWeight(content:warwick), product of:
3.1804748 = idf(docFreq=109863, numDocs=843621)
0.010607426 = queryNorm
0.7027923 = (MATCH) fieldWeight(content:warwick in 276780), product of:
1.4142135 = tf(termFreq(content:warwick)=2)
3.1804748 = idf(docFreq=109863, numDocs=843621)
0.15625 = fieldNorm(field=content, doc=276780)
0.46163678 = (MATCH) weight(siteDescription:warwick in 276780), product of:
0.0494812 = queryWeight(siteDescription:warwick), product of:
4.6647696 = idf(docFreq=24901, numDocs=843621)
0.010607426 = queryNorm
9.329539 = (MATCH) fieldWeight(siteDescription:warwick in 276780), product of:
1.0 = tf(termFreq(siteDescription:warwick)=1)
4.6647696 = idf(docFreq=24901, numDocs=843621)
2.0 = fieldNorm(field=siteDescription, doc=276780)
0.96127754 = (MATCH) weight(siteUrl:warwick in 276780), product of:
0.10097861 = queryWeight(siteUrl:warwick), product of:
9.519615 = idf(docFreq=193, numDocs=843621)
0.010607426 = queryNorm
9.519615 = (MATCH) fieldWeight(siteUrl:warwick in 276780), product of:
1.0 = tf(termFreq(siteUrl:warwick)=1)
9.519615 = idf(docFreq=193, numDocs=843621)
1.0 = fieldNorm(field=siteUrl, doc=276780)
0.62917286 = (MATCH) weight(title:warwick in 276780), product of:
0.05776636 = queryWeight(title:warwick), product of:
5.4458413 = idf(docFreq=11402, numDocs=843621)
0.010607426 = queryNorm
10.891683 = (MATCH) fieldWeight(title:warwick in 276780), product of:
1.0 = tf(termFreq(title:warwick)=1)
5.4458413 = idf(docFreq=11402, numDocs=843621)
2.0 = fieldNorm(field=title, doc=276780)
0.57006776 = (MATCH) weight(second_title:warwick in 276780), product of:
0.05498614 = queryWeight(second_title:warwick), product of:
5.18374 = idf(docFreq=14819, numDocs=843621)
0.010607426 = queryNorm
10.36748 = (MATCH) fieldWeight(second_title:warwick in 276780), product of:
1.0 = tf(termFreq(second_title:warwick)=1)
5.18374 = idf(docFreq=14819, numDocs=843621)
2.0 = fieldNorm(field=second_title, doc=276780)
(미안 해요, 난 단지 예를 얻을 수있는 큰 인덱스가 아닌 간단한 일이 있었다!)
다음과 같이 쿼리가 변경됩니다.
(my AND name) OR "my name"
여기에서 추가 구문 쿼리는 구문 검색이있을 때마다 점수에 추가합니다. 문서의 내용이 "내 이름"인 경우 구문 쿼리가 추가 점수가되지 않습니다. 그러나 내용이 "내 이름"인 문서는 추가 점수를 가지며 맨 위에 표시됩니다.
여기서 정규화 길이가 무시된다고 가정합니다.
비슷한 문제가 있습니다. 그리고 난 PhraseQuery
slop
(문서의 용어의 상대 위치는 계정에 토큰입니다)를 사용하여 해결했습니다. 희망이 도움이 될 것입니다.
더보기 : How can Lucene's scoring depend on relative position of query?
- 1. IOS에 관한 동영상에 관한 질문
- 2. Lucene DuplicateFilter 질문
- 3. Lucene 인터뷰 질문
- 4. 객관적인 질문, xpath에 관한 질문
- 5. 상속에 관한 질문
- 6. IOCP에 관한 질문
- 7. 표시에 관한 UIDatePicker 질문
- 8. MKMapView에 관한 질문 Annotations
- 9. 대상 재활용에 관한 질문
- 10. scjp enum에 관한 질문
- 11. PHP와 Java에 관한 질문
- 12. 검색에 관한 질문
- 13. Ajax에 관한 질문
- 14. clock() 함수에 관한 질문
- 15. 데이터 압축에 관한 질문
- 16. 특성에 관한 질문
- 17. 포인터 계산에 관한 질문
- 18. parcelable 오브젝트에 관한 질문
- 19. 알파 값에 관한 질문
- 20. Quartz.net에 관한 질문
- 21. 유동체 레이아웃에 관한 질문
- 22. libmemcached 사용에 관한 질문
- 23. 캐스팅에 관한 질문
- 24. 암호에 관한 질문
- 25. 제네릭에 관한 질문
- 26. 파이썬에서 pexpect에 관한 질문
- 27. NSString unacceptance에 관한 질문
- 28. grails 필터에 관한 질문
- 29. scala.math에 관한 질문
- 30. 로케일에 관한 질문
이렇게하면 두 번째 문서가 * 유일한 * 문서와 일치하게됩니다. 포스터는 단지 다른 사람보다 * 높은 * 점수 *를 얻으려고 요청했습니다. – Avi
답장을 보내 주셔서 감사합니다. 그러나 내가하고 싶은 것은 다른 것입니다. 나는 "my"와 "name"두 단어를 포함하는 모든 문서를 검색하려고합니다. 여기서 문제는 입력 한 키워드가 "내 이름"이므로 전체 구문 "내 이름"이 목록의 맨 위에 있고 "내 이름"이 포함 된 결과가 맨 아래에 표시되도록하려는 것입니다. . –
나는이를 반영하기 위해 나의 대답을 편집했다. 다시 읽으십시오. –