2014-03-04 2 views
0

여러 필드가있는 Solr 문서가 있다고 가정합니다. 이제 몇 가지 구체적인 이유 때문에 필드 유형 중 하나를 수정해야합니다. 해당 필드의 "유형"을 수정 한 후에 해당 필드를 쿼리 할 수 ​​없다는 것을 알고 있습니다. 다른 필드로 쿼리 할 수 ​​있습니까?Solr. schema.xml에서 필드 유형 중 하나 수정하기

내 필드 정의는

<field name="searchtag" type="text_general" indexed="true" stored="true"/> 

새로운 정의는

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <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"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <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"/> 
     </analyzer> 
    </fieldType> 

<fieldType name="text_ngram" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StandardFilterFactory"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15"/> 
    </analyzer> 
    <analyzer type="query"> 
       <tokenizer class="solr.StandardTokenizerFactory"/> 
       <filter class="solr.StandardFilterFactory"/> 
       <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

감사

+0

안녕하세요 buddy86, 다음과 같은 내용을 쓸 때 더 잘 설명해 주실 수 있습니까? "다른 필드로도 쿼리 할 수 ​​있습니까?" ? 서로 다른 두 필드에서 데이터를 인덱싱 할 수 있습니다. 아마도 필드로 인덱싱하고 다른 유형의 복사 필드를 설정할 수 있습니다. – Dany

+0

"기타 필드"는 특정 Solr 문서에있는 ** searchtag **를 제외한 필드를 의미합니다. 솔, 솔라 문서에 10 개의 다른 필드가 있습니다. 그 중 하나는 "검색 태그"입니다. 그래서 id와 searchtag를 제외한 다른 8 개의 필드에 대해서 말하고 있습니다. 희망, 지금은 분명합니다. – buddy86

답변

0

내가 대답을 발견

<field name="searchtag" type="text_ngram" indexed="true" stored="true" multivalued="true"/> 

입니다 필드 유형 정의했다.

Solr-4.2.1의 데이터에 작은 테스트 케이스를 사용해 보았습니다. 앞서 말했듯이 이전에 "검색 태그"의 유형은 입니다. 텍스트 _ 일반 :입니다. 나는 신선한 솔르 (Solr) 인스턴스를 가져 갔다. 여기서 searchtag를 text_general 유형 필드로 정의했습니다. 내가 정의한 다른 분야도있었습니다. 그런 다음 해당 필드에 데이터를 색인화하고 검색 태그으로 색인을 생성했습니다. 그것은 간단하고 똑 바른 앞으로 방법 이었기 때문에, 모든 것이 잘 작동했습니다. 나는 searchtag와 다른 분야를 묻고 적절한 결과를 얻었다.

그런 다음 schema.xml을 수정했습니다. 검색 태그의 유형을 text_general에서 text_ngram으로 변경했습니다. 스키마를 수정 한 후 Solr 인스턴스를 다시 시작했습니다. 이제 검색 태그에 대해 색인 생성 된 데이터에 대해 실제로 신경 쓰지 않았습니다. 나는 그 분야의 스키마를 엉망으로 만들었 기 때문에. 그래서 나는 다른 필드에서 같은 쿼리를 실행했습니다. 나는 이전과 같은 Solr 문서를 가지고있어서 기쁩니다. 비록 내가 스키마와 함께 연주했지만 다른 필드에 대한 다른 인덱스는 손상되지 않았습니다. 그게 내가 원하는거야.

나 같은 이런 유형의 문제에 빠진다면이 테스트 케이스가 도움이 될 것입니다.

참고 : 질문 영역의 "searchtag"및 필드 유형에 대한 스키마 정의를 언급했습니다.