Lucene은 이미 기본적으로 TF/IDF 채점을 지원하므로 찾고있는 것이 무엇인지 이해하지 못합니다.
쿼리 자체 내에서 TF/IDF를 기반으로 쿼리 용어의 무게를 측정하는 것처럼 실제로 들리는 것 같습니다.
TF : Lucene은 각 검색어의 점수를 합산합니다. 동일한 질의 용어 (field:(a a b)
같은) 쿼리에 두번 나타나는 경우 (아니오 동일한 의미가 있지만)를 두배 용어는 2
IDF 의해 승압 비교 무거운 중량을받을 않을 것이다 : IDF는간에 데이터를 참조하여 여러 문서 모음. 하나의 쿼리 만 있기 때문에 이것은 적용되지 않습니다. 당신이 그것에 대해 기술 취득하려는 경우 또는 모든 용어들은 그래서, IDF 정말 맥락에서 이해가되지 않습니다 1.
의 IDF가 있고, TF는 이미 당신을 위해 수행됩니다. 그래서, 당신은 정말로 아무것도 할 필요가 없습니다.
다른 점수 요소가 있다는 것을 명심하십시오. 여기서 coord
요소가 중요합니다.
a b a
는
a b c
쿼리 용어의 다섯 일치 (a b a c a
,하지만 d
)
그래서, 특정 채점 요소가 될 쿼리 용어의 네 일치 (a b a a
,하지만 c d
) 두 번째 문서를 더 강하게 평가하십시오.여기
는 doc
a b a
대한
explain
(
IndexSearcher.explain 참조) 출력이다 :
0.26880693 = (MATCH) product of:
0.37 = (MATCH) sum of:
0.10876686 = (MATCH) weight(text:a in 0) [DefaultSimilarity], result of:
0.10876686 = score(doc=0,freq=2.0 = termFreq=2.0
), product of:
0.25872254 = queryWeight, product of:
0.5945349 = idf(docFreq=2, maxDocs=2)
0.435168 = queryNorm
0.42039964 = fieldWeight in 0, product of:
1.4142135 = tf(freq=2.0), with freq of:
2.0 = termFreq=2.0
0.5945349 = idf(docFreq=2, maxDocs=2)
0.5 = fieldNorm(doc=0)
0.07690979 = (MATCH) weight(text:b in 0) [DefaultSimilarity], result of:
0.07690979 = score(doc=0,freq=1.0 = termFreq=1.0
), product of:
0.25872254 = queryWeight, product of:
0.5945349 = idf(docFreq=2, maxDocs=2)
0.435168 = queryNorm
0.29726744 = fieldWeight in 0, product of:
1.0 = tf(freq=1.0), with freq of:
1.0 = termFreq=1.0
0.5945349 = idf(docFreq=2, maxDocs=2)
0.5 = fieldNorm(doc=0)
0.10876686 = (MATCH) weight(text:a in 0) [DefaultSimilarity], result of:
0.10876686 = score(doc=0,freq=2.0 = termFreq=2.0
), product of:
0.25872254 = queryWeight, product of:
0.5945349 = idf(docFreq=2, maxDocs=2)
0.435168 = queryNorm
0.42039964 = fieldWeight in 0, product of:
1.4142135 = tf(freq=2.0), with freq of:
2.0 = termFreq=2.0
0.5945349 = idf(docFreq=2, maxDocs=2)
0.5 = fieldNorm(doc=0)
0.10876686 = (MATCH) weight(text:a in 0) [DefaultSimilarity], result of:
0.10876686 = score(doc=0,freq=2.0 = termFreq=2.0
), product of:
0.25872254 = queryWeight, product of:
0.5945349 = idf(docFreq=2, maxDocs=2)
0.435168 = queryNorm
0.42039964 = fieldWeight in 0, product of:
1.4142135 = tf(freq=2.0), with freq of:
2.0 = termFreq=2.0
0.5945349 = idf(docFreq=2, maxDocs=2)
0.5 = fieldNorm(doc=0)
0.6666667 = coord(4/6)
그리고 문서 a b c
를 들어, 원하는대로, 용어 a
대해 일치받는 것을
0.43768594 = (MATCH) product of:
0.52522314 = (MATCH) sum of:
0.07690979 = (MATCH) weight(text:a in 1) [DefaultSimilarity], result of:
0.07690979 = score(doc=1,freq=1.0 = termFreq=1.0
), product of:
0.25872254 = queryWeight, product of:
0.5945349 = idf(docFreq=2, maxDocs=2)
0.435168 = queryNorm
0.29726744 = fieldWeight in 1, product of:
1.0 = tf(freq=1.0), with freq of:
1.0 = termFreq=1.0
0.5945349 = idf(docFreq=2, maxDocs=2)
0.5 = fieldNorm(doc=1)
0.07690979 = (MATCH) weight(text:b in 1) [DefaultSimilarity], result of:
0.07690979 = score(doc=1,freq=1.0 = termFreq=1.0
), product of:
0.25872254 = queryWeight, product of:
0.5945349 = idf(docFreq=2, maxDocs=2)
0.435168 = queryNorm
0.29726744 = fieldWeight in 1, product of:
1.0 = tf(freq=1.0), with freq of:
1.0 = termFreq=1.0
0.5945349 = idf(docFreq=2, maxDocs=2)
0.5 = fieldNorm(doc=1)
0.07690979 = (MATCH) weight(text:a in 1) [DefaultSimilarity], result of:
0.07690979 = score(doc=1,freq=1.0 = termFreq=1.0
), product of:
0.25872254 = queryWeight, product of:
0.5945349 = idf(docFreq=2, maxDocs=2)
0.435168 = queryNorm
0.29726744 = fieldWeight in 1, product of:
1.0 = tf(freq=1.0), with freq of:
1.0 = termFreq=1.0
0.5945349 = idf(docFreq=2, maxDocs=2)
0.5 = fieldNorm(doc=1)
0.217584 = (MATCH) weight(text:c in 1) [DefaultSimilarity], result of:
0.217584 = score(doc=1,freq=1.0 = termFreq=1.0
), product of:
0.435168 = queryWeight, product of:
1.0 = idf(docFreq=1, maxDocs=2)
0.435168 = queryNorm
0.5 = fieldWeight in 1, product of:
1.0 = tf(freq=1.0), with freq of:
1.0 = termFreq=1.0
1.0 = idf(docFreq=1, maxDocs=2)
0.5 = fieldNorm(doc=1)
0.07690979 = (MATCH) weight(text:a in 1) [DefaultSimilarity], result of:
0.07690979 = score(doc=1,freq=1.0 = termFreq=1.0
), product of:
0.25872254 = queryWeight, product of:
0.5945349 = idf(docFreq=2, maxDocs=2)
0.435168 = queryNorm
0.29726744 = fieldWeight in 1, product of:
1.0 = tf(freq=1.0), with freq of:
1.0 = termFreq=1.0
0.5945349 = idf(docFreq=2, maxDocs=2)
0.5 = fieldNorm(doc=1)
0.8333333 = coord(5/6)
참고 첫 번째 문서에서 더 높은 가중치를 사용하면 각 독립형을 볼 수도 있습니다 a
따로 평가하고 점수에 더한다.
그러나 두 번째 문서에서 용어 "c"의 coord와 idf의 차이에 유의하십시오. 이러한 점수의 영향은 같은 단어의 배수를 더하면 부스트가 사라집니다. 쿼리에 a
초를 추가하면 결국 장소가 바뀝니다. c
에 성냥은 멀리 더 중대한 결과 평가되는 다만이다.
Lucene은 TF/IDF 채점을 기본적으로 지원하지만 이미 색인 된 문서에 대해서만 지원합니다. 귀하는 자신의 TF/IDF를 기반으로 질의어의 무게를 재고 싶다는 것을 정확하게 이해했습니다. IDF는 TF가 쿼리 자체에서 나오는 동안 인덱싱 된 문서에서 가져옵니다. – Diaa
여기서 coord 요소는 어떻게 다릅니 까? 나는 aba가 a를 위해 더 높은 TF를 가지고 있고 그 질의 또한 고려해야 할 TF가 높기를 바란다. – Diaa
IDF는 이미 고려되었으며 실제로 요청한 결과에 반하여 작동합니다. c는 두 개가 아닌 하나의 문서에서만 발생하기 때문에 더 높은 점수를 얻습니다. 설명했듯이 부울 쿼리가 어떻게 가산 점수를 받는지 간단히 설명합니다. 검색어가 많을수록 점수가 높아 지므로 검색어 TF도 이미 처리됩니다. 'coord'는 명시된대로 원하는 결과에 대해 작동합니다. 더 많은 검색어 조건 일치 = 높은 점수. doc1에 대한 coord는 4/6입니다. doc2에 대한 coord는 5/6입니다. idf와 coord 사이에서 'c'에 대한 일치는 훨씬 더 중요한 점수 영향입니다. – femtoRgon