2011-03-12 4 views
6

나는 solr 색인에 추가하십시오 : "미국". "미국"으로 검색 할 때 결과가 없습니다.Solr에서 형태소 분석을 구성하는 방법은 무엇입니까?

결과를 얻으려면 schema.xml을 어떻게 구성해야합니까?

현재 구성 :

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> 
       <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> 
       <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
      </analyzer> 
     </fieldType> 

답변

4

왜 두 형태소 분석기있을 것입니다?
두 유형의 분석기에서 EnglishPorterFilterFactory (지원 중단)을 제거하고 색인을 다시 작성한 다음 미국을 검색하면 미국이 표시되는지 확인하십시오.

효과가 없다면 줄기 필터를 모두 제거하고 대신 language="English"을 사용하여 SnowballPorterFilterFactory을 추가하십시오.

+0

두 가지 방법 모두 시도했습니다. 똑같다. – user657009

+0

index : "Slots" \t "Slots", "Slot", "Slotting"으로 검색 할 때 결과가 있습니다. 색인 : "American" \t 결과가 없습니다 : "American". – user657009

+3

먼저 Solr admin 웹 응용 프로그램을 열고 Analysis로 이동하여 필드 유형/이름을 선택하고 (자세한 두 출력 필드 모두 확인) Index 필드에 American을 입력하고 Query 필드에 America를 입력하십시오. 이렇게하면 필터가 얼마나 정확하게 분석되고 필터별로 필터링되는지 확인할 수 있습니다. 더 자세한 분석을 위해서는 이미 없으면 [Luke] (http://www.getopt.org/luke/luke-0.9.9/lukeall-0.9.9.jar)를 다운로드하십시오 (실행 가능한 병입니다). 그것을 시작하고 Lucene 색인을로드하십시오. 귀하의 콘텐츠가 줄기 및 기타 유용한 정보를 얼마나 정확하게 찾았는지 알아 보려면 ... –

0

analyzer에 하나의 스 트리머를 사용해야하고 EnglishPorterFilterFactory은 @Marko가 이미 언급 한대로 사용되지 않습니다. 따라서 분석기에서이 것을 제거해야합니다.

나는 모두 인덱스 및 쿼리 분석기 SnowballPorterFilterFactory을 사용 -

<fieldType name="text_stem"> 
    <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.SnowballPorterFilterFactory"/> 
     <!-- other filters --> 
    </analyzer> 
</fieldType> 

fieldType 정의 꽤 자기 설명하지만, 단지 경우 :

  • 토큰 화 solr.WhitespaceTokenizerFactory :이 작업 구분 기호로 공백을 사용하여 문장을 단어로 분리합니다.

  • 필터 solr.SnowballPorterFilterFactory :이 필터는 각 단어 (토큰)에 형태소 분석 알고리즘을 적용합니다. 위의 예에서 Snowball Porter 스팅 알고리즘을 선택했습니다. Solr은 인기있는 형태소 분석 알고리즘을 몇 가지 구현합니다.

예를 들어 여러 가지 형태소 분석 알고리즘을 탐색 할 수 있습니다. HunspellStemFilterFactory, KStemFilterFactory도 있습니다.

관련 문제