2013-11-29 2 views
0

내 인덱스와 쿼리가 정확히 같은 문제가 있지만 결과가 반환되지 않습니다. ENGTF 최대 길이보다 긴 단어는 실패하는 것 같습니다. 여기 내 스키마가있다. "만족"이 인덱스에 투입하고, "만족"이 쿼리에 투입 될 때 여기에 텍스트가 디버거에서 일치하지만 결과가 반환되지 않습니다.

<fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="lang/stopwords_en.txt" 
      enablePositionIncrements="true" 
      /> 

    <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" stemEnglishPossessive="0" preserveOriginal="1" types="wdfftypes.txt" protected="protwords.txt"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.ASCIIFoldingFilterFactory" words="mapping-FoldToASCII.txt"/> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="10" side="front"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.ASCIIFoldingFilterFactory" words="mapping-FoldToASCII.txt"/> 
    </analyzer> 
</fieldType> 

는 분석기의 스크린 샷이다.

enter image description here

어떤 아이디어가? 감사합니다.

답변

0

확실한 옵션은 nGram 길이 제한을 늘리는 것입니다. 당신은이 옵션을 알고 있고 아마도 그것이 이상적이지 않다고 생각합니다.

또 다른 옵션은 nGram 검색을 사용하는 두 번째 필드를 만들고 nGram없이 검색을 사용하는 것입니다. 예를 들어 귀하의 schema.xml 어딘가에 다음과 같이 표시 될 수 있습니다 :

<field name="myCoolNGramField" type="text_en_splitting" indexed="true" stored="false"/> 
<!-- make a new type, text_en_non_ngram, and use it for this new field below. --> 
<field name="myCoolField" type="text_en_non_ngram" indexed="true" stored="false"/> 
<copyField source="myCoolNGramField" dest="myCoolField" /> 
+0

정확 하 게 그건 내 마지막 해결 방법이었습니다. 나는 그것이 반드시 필요하지 않아야하는 해결 방법이기 때문에 그것을 피하려고 노력했다. – Tanner

+0

정말 큰 해결 방법은 아닙니다. 입력을 두 가지 다른 방법으로 처리하고자 할 때 사용하는 것은 매우 보편적 인 기술입니다. 단순한 n-gram 필터를 원했던 사람들은 원하는대로 전체 토큰을 일치시키기 시작하면 다소 좌절 할 수 있습니다. – Kevin

관련 문제