2013-01-17 5 views
2

내가 검색 서버 SOLR 3.6을 사용하고있는 text_general 유형이있어 :edismax는 CommonGramsQueryFilterFactory를 지원하지 않습니까?

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <charFilter class="solr.HTMLStripCharFilterFactory"/> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.CommonGramsFilterFactory" words="stopwords.txt" ignoreCase="true" /> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <!-- in this example, we will only use synonyms at query time 
    <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
    --> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt" /> 
    <filter class="solr.StemmerOverrideFilterFactory" dictionary="stemdict.txt" /> 
    <filter class="solr.PorterStemFilterFactory" /> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.CommonGramsQueryFilterFactory" words="stopwords.txt" ignoreCase="true" /> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
    <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.StemmerOverrideFilterFactory" dictionary="stemdict.txt" /> 
    <filter class="solr.PorterStemFilterFactory" /> 
    </analyzer> 
</fieldType> 

을하지만 내가 "로 또는 수 없다"검색을위한 edismax를 사용할 때 발견은 전체 문구를 제거 할 것 불용어 구성 때문입니다. 하지만 쿼리 분석을 위해 CommonGramsQueryFilterFactory을 사용했습니다. 디버그는 다음을 표시합니다.

<str name="rawquerystring">to be or not to be</str> 
<str name="querystring">to be or not to be</str> 
<str name="parsedquery">+()</str> 
<str name="parsedquery_toString">+()</str> 

어디에서 잘못 했습니까? edismax는 CommonGramsQueryFilterFactory를 지원하지 않습니까?

답변

0

http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters#solr.CommonGramsFilterFactory

는 "만든다 (정지 단어리스트로서 대개 같은) 일반적인 토큰 정규 토큰을 조합하여 대상 포진 (즉 the_cat)."라는

일반 토큰과 일반 토큰 만 결합 된 것처럼 보입니다. 공통 토큰을 공통 토큰과 결합하면 실패 할 수 있습니다.

나는 그것을 사용하지는 않았지만 그것을 사용하여보고 있었고 귀하의 질문과이 문서를 부딪 혔습니다.

0

edismax가 쿼리를 토큰 화하고 각 용어를 자체적으로 분석하는 것 같습니다. CommonGramsQueryFilter는 쌍을 생성하기 위해 모든 단어를 가져야하지만이 경우에는 'to'라는 단어를 얻은 다음 아무 것도하지 않고 'be'라는 단어를 사용하고 아무것도 수행하지 않습니다.

그래서 이 경우 CommonGramsQueryFilter는 아무 작업도 수행하지 않고 StopFilterFactory는 모든 중지 단어를 제거하고 빈 쿼리를 남깁니다.

관련 문제