我正在编写自定义Solr组件。在组件代码中,我需要使用一个停用词列表。我可以在组件代码中硬编码禁用词列表:
Set<String> stopwords = new HashSet<String>();
stopwords.add("a");
stopwords.add("the");
...
当然,我更喜欢使用一个停用词文件来初始化停用词的Set<String>
,而不是对停用词列表进行硬编码。我创建了这样一个停用词文件。我的问题是:
stopwords.txt
文件的位置。Set<String>
个停用词?特别是,Solr是否提供了一种机制,允许我以Set<String>
或List<String>
来获取存储在文件中的停用词?答案 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;
}