2013-04-18 19 views
0

我寫這個代碼我CustomAnalyzer的一部分:現在爲什麼這個代碼 - 添加wordnet同義詞索引 - 失敗?

public class CustomAnalyzer extends Analyzer { 

SynonymMap mySynonymMap = null; 

CustomAnalyzer() throws IOException { 
    SynonymMap.Builder builder = new SynonymMap.Builder(true); 

    FileReader fr = new FileReader("/home/watsonuser/Downloads/wordnetSynonyms.txt"); 
    BufferedReader br = new BufferedReader(fr); 
    String line = ""; 

    while ((line = br.readLine()) != null) { 
     String[] synset = line.split(","); 
     for(String syn: synset) 
      builder.add(new CharsRef(synset[0]), new CharsRef(syn), true); 
    } 

    br.close(); 
    fr.close(); 

    try { 
     mySynonymMap = builder.build(); 
    } catch (IOException e) { 
     System.out.println("Unable to build synonymMap"); 
     e.printStackTrace(); 
    } 
} 

public TokenStream tokenStream(String fieldName, Reader reader) { 
    TokenStream result = new PorterStemFilter(new SynonymFilter(
               (new StopFilter(true,new LowerCaseFilter 
               (new StandardFilter(new StandardTokenizer 
               (Version.LUCENE_36,reader) 
               ) 
               ),StopAnalyzer.ENGLISH_STOP_WORDS_SET)), mySynonymMap, true) 
               ); 


} 
} 

,如果我用同樣的CustomAnalyzer作爲我查詢的一部分,那麼,如果我進入查詢作爲

myFieldName: manager 

它擴展經理的同義詞查詢。

但是,我想同義詞只是我的索引的一部分,我不希望我的查詢擴展與同義詞。

所以,當我查詢索引,只有當從我CustomAnalyzer刪除SynonymFilter,查詢仍然是

myFieldName: manager 

但是,它無法檢索具有管理者的同義詞的文檔。

我們如何解決這個問題?

回答

0

如果您在查詢處理過程中沒有同義詞構建器,那麼它將匹配的唯一術語是您在索引過程中映射到的內容。而你在這裏沒有展示那部分。

解決此問題的最佳方法是查看Admin/Core/Analysis屏幕(在Solr 4+中)並放入文本。它將顯示在索引和查詢的每個階段運行後,文本會發生什麼情況。

你甚至不需要運行reindexer。您可以定義一組您想要弄清楚的不同類型,然後針對這些類型直接運行對例句的分析。