从Solr组件代码访问停用词列表

时间:2013-07-17 09:01:21

标签: java solr lucene

我正在编写自定义Solr组件。在组件代码中,我需要使用一个停用词列表。我可以在组件代码中硬编码禁用词列表:

Set<String> stopwords = new HashSet<String>();
stopwords.add("a");
stopwords.add("the");
...

当然,我更喜欢使用一个停用词文件来初始化停用词的Set<String>,而不是对停用词列表进行硬编码。我创建了这样一个停用词文件。我的问题是:

  1. 我应该把文件放在哪里? (我发现了几个包含stopwords.txt文件的位置。
  2. 如何使用文件中的条件初始化Set<String>个停用词?特别是,Solr是否提供了一种机制,允许我以Set<String>List<String>来获取存储在文件中的停用词?

1 个答案:

答案 0 :(得分:3)

您需要制作组件ResourceLoaderAware ResourceLoaderAware会为inform方法提供ResourceLoader的实例,您可以使用此方法加载和读取文件。
这些文件可能应该托管在conf目录中。

e.g。来自SynonymFilterFactory.java的代码同义词是schema.xml中定义的属性

protected Iterable<String> loadRules( String synonyms, ResourceLoader loader ) {
    List<String> wlist=null;
    try {
      File synonymFile = new File(synonyms);
      if (synonymFile.exists()) {
        wlist = loader.getLines(synonyms);
      } else  {
        List<String> files = StrUtils.splitFileNames(synonyms);
        wlist = new ArrayList<String>();
        for (String file : files) {
          List<String> lines = loader.getLines(file.trim());
          wlist.addAll(lines);
        }
      }
    } catch (IOException e) {
      throw new RuntimeException(e);
    }
    return wlist;
}