2011-06-29 21 views
0

私がsolrで "elegant"を検索すると、 "elegant"の検索結果も表示されます。solrでの検索結果へのフィルタ効果

私は

WhitespaceTokenizerFactory 
StopFilterFactory 
WordDelimiterFilterFactory 
LowerCaseFilterFactory 
SynonymFilterFactory 
EnglishPorterFilterFactory 
RemoveDuplicatesTokenFilterFactory 
ReversedWildcardFilterFactory 

と分析クエリの分析指標のためにこれらのフィルタを使用:

WhitespaceTokenizerFactory 
SynonymFilterFactory 
StopFilterFactory 
WordDelimiterFilterFactory 
LowerCaseFilterFactory 
EnglishPorterFilterFactory 
RemoveDuplicatesTokenFilterFactory 

私は、検索結果に影響を与えているフィルターを知りたいです。短い答えザッツ

答えて

0

EnglishPorterFilterFactory

;)

もう少し情報:

英語ポーターはalogrithmを語幹英語ポーターのステマーを意味しています。エレガントでエレガントなのは、ステマー(発見的な単語のルートビルダー)によると同じステムです。

これはオンラインで確認できます。 Here。基本的に "eleg ant"と "eleg ance"が同じステムにステムされています。eleg Solrのソースから

    File protectedWordFiles = new File(wordFiles); 
        if (protectedWordFiles.exists()) { 
         List<String> wlist = loader.getLines(wordFiles); 
         //This cast is safe in Lucene 
         protectedWords = new CharArraySet(wlist, false);//No need to go through StopFilter as before, since it just uses a List internally 
        } else { 
         List<String> files = StrUtils 
           .splitFileNames(wordFiles); 
         for (String file : files) { 
          List<String> wlist = loader.getLines(file 
            .trim()); 
          if (protectedWords == null) 
           protectedWords = new CharArraySet(wlist, 
             false); 
          else 
           protectedWords.addAll(wlist); 
         } 
        } 
       } catch (IOException e) { 
        throw new RuntimeException(e); 
       } 
      } 
     } 

語幹に影響を与え一部厥:

 public void inform(ResourceLoader loader) { 
      String wordFiles = args.get(PROTECTED_TOKENS); 
      if (wordFiles != null) { 
       try { 

はここで正確にprotwordsが場にファイルを付属しています。雅は、私は効果を見るために:)のSolr adimnページをuseed、しかしenglishPorterFilterは私が何も含まれていないいるportwords.txtを、使用して:そこに雪だるまライブラリ

 public EnglishPorterFilter create(TokenStream input) { 
      return new EnglishPorterFilter(input, protectedWords); 
     } 

    } 

    /** 
    * English Porter2 filter that doesn't use reflection to 
    * adapt lucene to the snowball stemmer code. 
    */ 
    @Deprecated 
    class EnglishPorterFilter extends SnowballPorterFilter { 
     public EnglishPorterFilter(TokenStream source, 
       CharArraySet protWords) { 
      super (source, new org.tartarus.snowball.ext.EnglishStemmer(), 
        protWords); 
     } 
    } 
+0

@fyrの呼び出しを参照してください。どのようにそれをやっている? – Romi

+0

portwords.txt – Romi

+0

の使用はありません。あなたが修正した茎にはポートワードのみを使用します。それは誤りがあるので、間違いを起こすでしょう。 English PorterアルゴリズムはSnowballライブラリを使用します。 – fyr