2012-02-13 1 views
1

EdgeNGramFilterFactory를 사용하여 이름 필드를 인덱싱하려고합니다. 나는의 schema.xml에게Sunspot에서 edgeNGram 필터 사용

<fieldType name="text_prefix" class="solr.TextField" omitNorms="false"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ISOLatin1AccentFilterFactory"/> 
    <filter class="solr.TrimFilterFactory" /> 
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="20" side="front"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.ISOLatin1AccentFilterFactory"/> 
    <filter class="solr.TrimFilterFactory" /> 
    </analyzer> 
</fieldType> 

... 

<field name="text_prefix" stored="false" type="string" multiValued="true" indexed="true"/> 

을 흉내 낸 시도하고 내 모델에서 내가 가진 :

searchable do 
    text :name, :as => :text_prefix 

을 아무 효과가없는 것 같습니다 그러나. 나는 무엇인가 놓치고 있습니까?

+1

당신이 아무런 효과가없는 무엇을 의미합니까 같은

<field name="text_prefix" stored="false" type="string" multiValued="true" indexed="true"/> 

를 변경해야합니까? 너는 무엇을 확인하고 있니? 너는 무엇을 위해 질문하고 있니? – Jayendra

+0

"Ne"를 검색하고 "New York"과 같은 항목을 가져와야합니다. 현재는 아무것도 반환하지 않습니다. – lulalala

답변

3

스키마는 한 가지를 제외하고 좋아 보인다 : 당신의 text_prefix 필드에 따라서는 EdgeNGramFilterFactory를 사용하지 않는,하지 text_prefix 유형 string이며.

이 라인

<field name="text_prefix" stored="false" type="text_prefix" multiValued="true" indexed="true"/> 
+0

감사합니다 올바르게 작동합니다. 그러나 왜 당신은 build-in' lulalala

+0

@lulalala 작동을 알면 다행입니다. 죄송합니다. 질문을받지 못했습니다. 다시 말해 줄 수 있습니까? 일반적으로 문자열 fieldType은 토큰 화되지 않습니다. 단순한 문자열입니다. – javanna

+0

지금 당장 걱정하지 마십시오. Sunspot 's는 기본 필드 유형이 "텍스트"라고 말하지만 실제로는 문자열 인 정적 "텍스트"유형이 아닌 실제로 동적 인 "텍스트"필드입니다. – lulalala