2011-10-13 2 views
3

40000 개가 넘는 문서가있는 인트라넷 용 검색 엔진으로 SOLR을 실행하고 있습니다. copyField 지시문을 사용하여 titlekeywords 필드를 content 필드에 복사하고 색인 만하면 매우 간단하게 유지할 수 있습니다. SOLR : NGramFilterFactory 문제

지금부터 우리는이 설정을 사용했다 : 꽤 좋은 일을하지만, 거기
<analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" /> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.LowerCaseFilterFactory" />    
    <filter class="solr.SnowballPorterFilterFactory" language="German" /> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
</analyzer> 

불평, 와일드 카드가 수동으로 설정해야한다고.

<analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" /> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <filter class="solr.LowerCaseFilterFactory" />    
    <filter class="solr.SnowballPorterFilterFactory" language="German" /> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="30" /> 
</analyzer> 

문제는 지금 : 나는 특정 키워드 ('소니') 7 문서를 찾는 데 사용 된 설정과 그래서 분석기의 마지막 행으로 NGRamFilterFactory을 추가했다. 자, 거기에만 2. 내가 완전히 색인을 플러시하고 처음부터 그것을 구축. 그 라인을 다시 가져 와서 문서를 다시 색인하면 예상대로 다시 작동합니다.

  • 가 FilterFactory 나를 위해 옳은 일하거나 토크 나이 공장해야합니다 : 그것은 내가 가지고있는 질문에 날 리드? 그리고 토크 나이저가 필터 뒤에서 실행할 수 있다면?
  • 나는 75 개의 문서를 묶어서 xml로 문서를 추가하고 맨 마지막에 커밋을하고있다. 커밋이 더 있어야할까요?
  • 는 GRR .. 사전에

덕분에 지금은 잊고 또 다른 하나가 있었다!

답변

5

그냥 추측 -

뭐죠 콘텐츠 필드의 크기 (단어 수)?
이제 minGramSize가 3 인 필터 체인에 NGramFilterFactory가 있으므로 많은 토큰이 생성되어 새로운 위치에 생성됩니다.

solrconfig.xml의 maxFieldLength 설정은 인덱싱 할 토큰 수를 제한합니다.
기본값은 10000 (여전히 높음)이지만 필터 체인에서 큰 내용과 ngramfilter를 초과 할 수 있습니다.

<maxFieldLength>10000</maxFieldLength> 

이 값을 큰 숫자로 높이고 색인을 다시 만들고 일치하는 항목이 있는지 확인하십시오.

+0

좋은 '야생 추측'. 한도를 늘리면 그 일이 끝났다. 색인에 얼마나 많은 토큰이 있는지 확인할 수 있는지 알고 있습니까? – harpax

+0

색인에서 용어를 확인할 수 있습니다. 문서 및 필드를 확인할 수 있는지 확실하지 않습니다. luke 도구를 사용해보십시오. – Jayendra

2

도구를 사용하는 것이 좋습니다. 이것은 Solr Admin 사이트를 통해 액세스 할 수 있습니다 ([Config] 옆에있는 [Analysis] 링크 클릭). 이것은 텍스트 값을 단어로 분해하는 방법을 볼 수 있고 체인의 각 필터를 통과 한 결과 토큰을 보여주는 매우 강력한 도구입니다.

"Sony"를 쿼리 할 때 반환되지 않는 문서 중 하나를 가져 와서 색인 필드에 색인을 생성하고 sony를 쿼리 필드에 붙여 넣으면 Solr이 어떻게 적용되는지 확인할 수 있습니다 필터를 적용한 다음 일치하는 필드를 쿼리합니다. 그런 다음 NGramFilterFactory없이 스키마를 원본으로 다시 변경하고 NGMLFilterFactory가 인덱스 및 쿼리에 미치는 영향을 비교하기 위해 문서가 원래 분류 및 일치되는 방식을 확인할 수 있습니다.

작은 검색 결과는 NGramFilterFactory 설정에서 지정한 minGramSize 및 maxGramSize 설정을 기반으로 할 수 있습니다. 인덱스에 미치는 영향에 대한 자세한 내용은 Solr Wiki의 NGramFilterFactory 설명서를 참조하십시오.

+0

해당 도구의 결과를 확인했지만 오류를 찾을 수 없습니다. Jayendra Patil이 소환 한 maxFieldLength를 늘리는 것이 효과적이었습니다. 귀하의 답변 주셔서 감사합니다! – harpax