2011-11-08 4 views
4
나는 "아이폰"을 검색 할 때 나는 다음과 같은 기록과에 대한 점수를

-SOLR 득점 - fieldnorm

신기록 : 필드 이름 - 표시 이름 : "아이폰" 필드 이름 - 이름 : "아이폰"

11.654595 = (MATCH) sum of: 
    11.654595 = (MATCH) max plus 0.01 times others of: 
    7.718274 = (MATCH) weight(DisplayName:iphone^10.0 in 915195), product of: 
     0.6654692 = queryWeight(DisplayName:iphone^10.0), product of: 
     10.0 = boost 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     0.0057376726 = queryNorm 
     11.598244 = (MATCH) fieldWeight(DisplayName:iphone in 915195), product of: 
     1.0 = tf(termFreq(DisplayName:iphone)=1) 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     1.0 = fieldNorm(field=DisplayName, doc=915195) 
    11.577413 = (MATCH) weight(Name:iphone^15.0 in 915195), product of: 
     0.99820393 = queryWeight(Name:iphone^15.0), product of: 
     15.0 = boost 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     0.0057376726 = queryNorm 
     11.598244 = (MATCH) fieldWeight(Name:iphone in 915195), product of: 
     1.0 = tf(termFreq(Name:iphone)=1) 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     1.0 = fieldNorm(field=Name, doc=915195) 

Record2 : 필드 이름 - 표시 이름 : "아이폰 책" 필드 이름 - 이름 : "아이폰 책"

7.284122 = (MATCH) sum of: 
    7.284122 = (MATCH) max plus 0.01 times others of: 
    4.823921 = (MATCH) weight(DisplayName:iphone^10.0 in 453681), product of: 
     0.6654692 = queryWeight(DisplayName:iphone^10.0), product of: 
     10.0 = boost 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     0.0057376726 = queryNorm 
     7.2489023 = (MATCH) fieldWeight(DisplayName:iphone in 453681), product of: 
     1.0 = tf(termFreq(DisplayName:iphone)=1) 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     0.625 = fieldNorm(field=DisplayName, doc=453681) 
    7.2358828 = (MATCH) weight(Name:iphone^15.0 in 453681), product of: 
     0.99820393 = queryWeight(Name:iphone^15.0), product of: 
     15.0 = boost 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     0.0057376726 = queryNorm 
     7.2489023 = (MATCH) fieldWeight(Name:iphone in 453681), product of: 
     1.0 = tf(termFreq(Name:iphone)=1) 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     0.625 = fieldNorm(field=Name, doc=453681) 

Record3 : 필드 이름 - 표시 이름 : "아이폰" 필드 이름 - 이름 : "아이폰"record2 3 개 단어를 가지고 record3 그냥 한 단어가있을 때 Record2 및 Record3가 같은 점수가 왜

7.284122 = (MATCH) sum of: 
    7.284122 = (MATCH) max plus 0.01 times others of: 
    4.823921 = (MATCH) weight(DisplayName:iphone^10.0 in 5737775), product of: 
     0.6654692 = queryWeight(DisplayName:iphone^10.0), product of: 
     10.0 = boost 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     0.0057376726 = queryNorm 
     7.2489023 = (MATCH) fieldWeight(DisplayName:iphone in 5737775), product of: 
     1.0 = tf(termFreq(DisplayName:iphone)=1) 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     0.625 = fieldNorm(field=DisplayName, doc=5737775) 
    7.2358828 = (MATCH) weight(Name:iphone^15.0 in 5737775), product of: 
     0.99820393 = queryWeight(Name:iphone^15.0), product of: 
     15.0 = boost 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     0.0057376726 = queryNorm 
     7.2489023 = (MATCH) fieldWeight(Name:iphone in 5737775), product of: 
     1.0 = tf(termFreq(Name:iphone)=1) 
     11.598244 = idf(docFreq=484, maxDocs=19431244) 
     0.625 = fieldNorm(field=Name, doc=5737775) 

. 따라서 Record3은 Record2보다 높은 관련성을 가져야합니다. 왜 Record2와 Record3의 fieldNorm이 동일합니까?

QueryParser : Dismax FieldType : solrconfig.xml

기본적으로 텍스트 fieldtype 추가의 datafeed :

신기록 : 아이폰

{ 
     "ListPrice":1184.526, 
     "ShipsTo":1, 
     "OID":"190502", 
     "EAN":"9780596804299", 
     "ISBN":"0596804296", 
     "Author":"Pogue, David", 
     "product_type_fq":"Books", 
     "ShipmentDurationDays":"21", 
     "CurrencyValue":"24.9900", 
     "ShipmentDurationText":"NORMALLY SHIPS IN 21 BUSINESS DAYS", 
     "Availability":0, 
     "COD":0, 
     "PublicationDate":"2009-08-07 00:00:00.0", 
     "Discount":"25", 
     "SubCategory_fq":"Hardware", 
     "Binding":"Paperback", 
     "Category_fq":"Non Classifiable", 
     "ShippingCharges":"0", 
     "OIDType":8, 
     "Pages":"397", 
     "CallOrder":"0", 
     "TrackInventory":"Ingram", 
     "Author_fq":"Pogue, David", 
     "DisplayName":"Iphone", 
     "url":"/iphone-pogue-david/books/9780596804299.htm", 
     "CurrencyType":"USD", 
     "SubSubCategory":"Handheld Devices", 
     "Mask":0, 
     "Publisher":"Oreilly & Associates Inc", 
     "Name":"Iphone", 
     "Language":"English", 
     "DisplayPriority":"999", 
     "rowid":"books_9780596804299" 
     } 

Record2 : 아이폰 예약

{ 
     "ListPrice":1184.526, 
     "ShipsTo":1, 
     "OID":"94694", 
     "EAN":"9780321534101", 
     "ISBN":"0321534107", 
     "Author":"Kelby, Scott/ White, Terry", 
     "product_type_fq":"Books", 
     "ShipmentDurationDays":"21", 
     "CurrencyValue":"24.9900", 
     "ShipmentDurationText":"NORMALLY SHIPS IN 21 BUSINESS DAYS", 
     "Availability":1, 
     "COD":0, 
     "PublicationDate":"2007-08-13 00:00:00.0", 
     "Discount":"25", 
     "SubCategory_fq":"Handheld Devices", 
     "Binding":"Paperback", 
     "BAMcategory_src":"Computers", 
     "Category_fq":"Computers", 
     "ShippingCharges":"0", 
     "OIDType":8, 
     "Pages":"219", 
     "CallOrder":"0", 
     "TrackInventory":"Ingram", 
     "Author_fq":"Kelby, Scott/ White, Terry", 
     "DisplayName":"The Iphone Book", 
     "url":"/iphone-book-kelby-scott-white-terry/books/9780321534101.htm", 
     "CurrencyType":"USD", 
     "SubSubCategory":" Handheld Devices", 
     "BAMcategory_fq":"Computers", 
     "Mask":0, 
     "Publisher":"Pearson P T R", 
     "Name":"The Iphone Book", 
     "Language":"English",   
     "DisplayPriority":"999", 
     "rowid":"books_9780321534101" 
     } 

레코드 3 : iPhone

{ 
     "ListPrice":278.46, 
     "ShipsTo":1, 
     "OID":"694715", 
     "EAN":"9781411423527", 
     "ISBN":"1411423526", 
     "Author":"Quamut (COR)", 
     "product_type_fq":"Books", 
     "ShipmentDurationDays":"21", 
     "CurrencyValue":"5.9500", 
     "ShipmentDurationText":"NORMALLY SHIPS IN 21 BUSINESS DAYS", 
     "Availability":0, 
     "COD":0, 
     "PublicationDate":"2010-08-03 00:00:00.0", 
     "Discount":"25", 
     "SubCategory_fq":"Hardware", 
     "Binding":"Paperback", 
     "Category_fq":"Non Classifiable", 
     "ShippingCharges":"0", 
     "OIDType":8, 
     "CallOrder":"0",   
     "TrackInventory":"BNT", 
     "Author_fq":"Quamut (COR)", 
     "DisplayName":"iPhone", 
     "url":"/iphone-quamut-cor/books/9781411423527.htm", 
     "CurrencyType":"USD", 
     "SubSubCategory":"Handheld Devices", 
     "Mask":0, 
     "Publisher":"Sterling Pub Co Inc", 
     "Name":"iPhone", 
     "Language":"English", 
     "DisplayPriority":"999", 
     "rowid":"books_9781411423527" 
     }   
+0

레코드 1과 레코드 3의 차이점이 없으므로 결과가 달라지지 않습니다. 스코어가 레코드 3에 속해 있는지 확인하고 쿼리 파서, 필드 유형 및 데이터 피드에 대한 자세한 정보를 제공 할 수 있습니까? – Jayendra

+0

안녕하세요, 나는 dismax 쿼리 파서를 사용하고 있으며 점수는 레코드 3에 속합니다. 교차 체크를하고 3 레코드의 점수를 모두 언급했습니다. 필드 유형은 solrconfig.xml에 정의 된 기본 "텍스트"필드 유형입니다. – user1021590

+0

데이터 피드도 제공 할 수 있습니까? – Jayendra

답변

5

fieldnorm은 필드 길이, 즉 용어의 수를 고려합니다.
사용 된 필드 유형은 필드 표시 이름 & 이름의 텍스트입니다. 여기에는 중지 단어와 단어 구분 기호 필터가 있습니다.

기록 1 - Iphone
하나의 토큰을 생성 할 것인가 - Iphone, Book
는 불용어에 의해 제거 될 수 - 2 토큰을 생성겠습니까 The Iphone Book
- IPhone

기록 2.

기록 3-iPhone
도 2 토큰을 생성 할 것인가 - 아이폰, splitOnCaseChange와 단어 구분 기호 필터가 지금, 전화 2 토큰으로 아이폰을 분할 할 경우 변화를 가지고 같은 분야의 규범을 생산 하듯이 i,phone
을 기록 2

+0

안녕 Jayendra, 고마워. 그러나 다른 데이터 세트에 대해서는 관련성이 잘못되었습니다. Record1 : "The Real Da Vinci Code"및 Record2 : "The Da Vinci Code". "da vinci code"를 검색 할 때 fieldNorm이 동일하기 때문에 두 레코드 모두 동일한 점수를 얻습니다. 동일한 필드 유형 "텍스트"를 사용합니다. SolrAnalysis를 사용하면 Record1이 "실제 다빈치 코드"로 변경되고 record2가 "다빈치 코드"(색인 시간)로 변경되었음을 알 수 있습니다. 그런데 두 점수가 같은 이유는 무엇입니까? – user1021590

+0

데이터 필드와 디버그 점수를 제공 할 수 있습니까? – Jayendra

+0

안녕 Jayendra, 데이터 필드는 "텍스트"입니다. 디버그 점수를 대답의 일부로 추가했습니다. – user1021590

3

이것은 "da vinci code"검색 예제에 대한 user1021590의 후속 질문/답변에 대한 답변입니다.

모든 문서가 동일한 점수를 얻는 이유는 lengthNorm의 미세한 구현 세부 사항 때문입니다.Lucence TFIDFSimilarity doc은 norm(t, d)에 대해 다음을 명시합니다.

결과 값은 저장되기 전에 단일 바이트로 인코딩됩니다. 검색시, 표준 바이트 값은 인덱스 디렉토리에서 읽혀지고 float norm 값으로 다시 디코딩됩니다. 이 인코딩/디코딩은 인덱스 크기를 줄이면서 정밀 손실의 댓가로 제공됩니다. 디코드 (encode (x)) = x는 보장되지 않습니다. 예를 들어, decode (encode (0.89)) = 0.75입니다.

public static float byte315ToFloat(byte b) 
{ 
    if (b == 0) 
     return 0.0f; 
    int bits = (b & 0xff) << (24 - 3); 
    bits += (63 - 15) << 24; 
    return Float.intBitsToFloat(bits); 
} 
:

public static byte floatToByte315(float f) 
{ 
    int bits = Float.floatToRawIntBits(f); 
    int smallfloat = bits >> (24 - 3); 
    if (smallfloat <= ((63 - 15) << 3)) 
    { 
     return (bits <= 0) ? (byte) 0 : (byte) 1; 
    } 
    if (smallfloat >= ((63 - 15) << 3) + 0x100) 
    { 
     return -1; 
    } 
    return (byte) (smallfloat - ((63 - 15) << 3)); 
} 

플로트 해당 바이트의 복호로 이루어진다 :

는 코드 파고 경우는 다음과 같이,이 플로트에 바이트 인코딩 구현되는 것을 알

lengthNorm1/sqrt(number of terms in field)으로 계산됩니다. 그런 다음 floatToByte315을 사용하여 저장 용으로 인코딩됩니다.

floatToByte315(1/sqrt(3.0)) = 120

을 4 조건 필드, 우리는 얻을 : 3 조건 필드를 들어, 우리가 얻을

: 그래서

floatToByte315(1/sqrt(4.0)) = 120

가 디코딩 얻을

byte315ToFloat(120) = 0.5.

하는 쿼리 필요가 그들의 진정한 정보를 표현하는 사용자의 어려움 (그리고 부정확) 주어진 규범 값의 같은 손실 압축을 지원하는 근거 만 큰 차이는 중요 :

기타 문서는 또한이 상태.

업데이트 : Solr 4.10부터이 구현과 해당 문장은 DefaultSimilarity의 일부입니다.

+0

이봐, 나는 같은 문제에 직면하고있다 .3 & 4 용어 문서에 대해 fieldNorm은 동일하므로 검색 결과에 영향을 미친다. 이것에 대한 해결책이 있습니까? –

+0

lengthNorm 클래스 메서드를 오버 라이딩하고 길이가 3/4 인 문서의 경우 특수 처리를 시도합니다. –