2011-09-26 3 views
2

일련의 필터를 사용하여 합리적인 이름 제안 기능을 구현하려고합니다. 순간 나는 확실히 더 조정이 필요단어 조합을 만드는 solr 필터 또는 토크 나이저

 <fieldType name="suggester" class="solr.TextField" positionIncrementGap="1" autoGeneratePhraseQueries="true"> 
     <analyzer type="index"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" 
        catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
      <filter class="solr.ASCIIFoldingFilterFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.ShingleFilterFactory" outputUnigramsIfNoShingles="true" maxShingleSize="2" 
        outputUnigrams="true"/> 
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15"/> 
     </analyzer> 
     <analyzer type="query"> 
      <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" 
        catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
      <filter class="solr.ASCIIFoldingFilterFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.ShingleFilterFactory" outputUnigramsIfNoShingles="true" maxShingleSize="2" 
        outputUnigrams="true"/> 
      <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15"/> 
     </analyzer> 
    </fieldType> 

을 가지고,하지만 난이 질문에 대한 하나 개의 특정 측면 후입니다. 입력 문자열이 mark daniel sievers 인 경우 위의 내용은 marksievers의 검색어와 일치하지만 실제로 원하는 것은 오버 머치가 발생하고 구성 가능한 방식으로 단어를 결합 할 수있는 필터/토크 나이저를 사용하기 때문에 EdgeNGramFilter의 자세한 정보를 줄이는 것입니다. 입력 mark daniel rex sievers 토큰을 생성 mark sievers, mark daniel sievers, mark rex sievers 등등. 나는 그 어떤 paricular 알고리즘을 적용하지 못했지만 그러한 짐승이 존재하는지 (거의 확실하게) 또는 필터 플러그인으로 내 자신을 쓰는 것이 가장 좋은지 궁금하다.

SOLR 나는 ShingleFilter 사용하십시오 3.3.0

답변

관련 문제