2

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

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

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

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

1 回答 1

3

你需要让你的组件ResourceLoaderAware
ResourceLoaderAware将为您inform提供一个实例的方法ResourceLoader,您可以使用它来加载和读取文件。
这些文件可能应该托管在 conf 目录中。

例如,来自 SynonymFilterFactory.java 的代码 synonyms 是 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;
}
于 2013-07-17T10:20:30.863 回答