2010-07-13 4 views
0

Windows에서 Solr 1.4.1 (lucene 2.9.3)을 사용하고 있으며 ShingleFilter를 이해하려고합니다. 다음 코드를 작성하여 필드에 색인 된 실제 구문보다 더 많은 단어를 제공하면 해당 필드에 대한 검색이 실패합니다. 즉, debugQuery = true로 해당 필드에서 제공된 점수가 없습니다.
ID : 1
타이틀 _1 : 니나 시몬 (Nina Simone)
TITLE_2 : 나는 당신에인덱싱 된 구문보다 많은 단어가 포함 된 ShingleFilter 검색이 실패합니다.

문제를 주문을 넣어 다음 쿼리 여기

내가 필드 이름, 재생하기 위해 만든 예제 및 색인 문서입니다 (dismax) :
- < "니나 시몬 (Nina Simone) 내가 넣어"- (debugQuery 사용) TITLE_1 검색에서 점수가 실패
- "니나 시몬 (Nina Simone)"< - 성공

위의 불일치를 분석하려고 할 때 Solly 's Field Analysis를 'Shingle'필드 (아래에 있음)와 함께 사용하고 "Nina Simone put"을 시도하면 성공합니다. 따라서 쿼리 중에는 점수가 제공되지 않습니다. 또한 'parsedquery'를 확인하고 disjunctionMaxQuery가 title_1 필드에 "Nina_Simone Simone_I I_put"문자열을 발행하는 것을 보여줍니다. 나는 또한 텍스트 인 캐치 필드가

<fieldType name="shingle" class="solr.TextField" positionIncrementGap="100" indexed="true" stored="true"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ShingleFilterFactory" maxShingleSize="2" outputUnigrams="false"/> 
    </analyzer> 
</fieldType> 

참고 :

TITLE_1 및 TITLE_2 필드로 정의, 유형 '싱글'이다. qf는 'id^2 catchall^0.8'로 설정되고 pf는 'title_1^1.5 title_2^1.2'

으로 설정됩니다. 누락되었거나 잘못된 것이 있습니까?

답변

0

dismax 쿼리에서 쿼리 점수는 하위 쿼리의 최대 값입니다. 합계가 아닙니다. 나는 그것이 shingle 쿼리를 희소하게하는 방법에 대해 많이 알지 못하지만 "title1 : (shingle1 shingle2 ...) (title2 : (shingle1 shingle2 ...))"와 같은 것을하면 " 하나의 필드 만 점수에 기여합니다.

+0

tmax가 0.0 인 경우 dismax는 합계의 최대 값을 취합니다. 위의 점은 정확하지만 debugQuery를 true로 설정하면 최대 검색어를 선택하기 전에 각 검색어의 점수가 표시됩니다. PositionFilterFactory (Steve 덕분에)를 사용하여 위의 문제를 해결하고 정확하게 고정 된 방법을 이해하려고합니다. 어떤 아이디어? – Ethan

관련 문제