【发布时间】:2015-05-05 14:17:47
【问题描述】:
我使用 Stardog 作为语义图数据库。例如,我的数据库包含“apple”但不包含“apples”,所以如果我查询“apples”,它找不到任何东西。
解决此问题的一种可能方法是将所有标签的词干版本添加到数据库中,但这效率低下。
由于 Stardog 使用 SPARQL 查询语言和 Lucene,我如何要求 Stardog 在其搜索中使用词干提取?
【问题讨论】:
我使用 Stardog 作为语义图数据库。例如,我的数据库包含“apple”但不包含“apples”,所以如果我查询“apples”,它找不到任何东西。
解决此问题的一种可能方法是将所有标签的词干版本添加到数据库中,但这效率低下。
由于 Stardog 使用 SPARQL 查询语言和 Lucene,我如何要求 Stardog 在其搜索中使用词干提取?
【问题讨论】:
假设您想要英语语言词干提取,正确使用的分析器将是 EnglishAnalyzer
Stardog 允许您根据their documentation 更改分析仪。你需要实现一个 AnalyzerFactory,比如:
public final class EnglishAnalyzerFactory implements AnalyzerFactory {
@Override
public Analyzer get() {
return new EnglishAnalyzer(Version.LUCENE_47);
}
}
然后:
在 META-INF/services 目录中创建一个名为
com.complexible.stardog.search.AnalyzerFactory的文件。该文件的内容应该是 AnalyzerFactory 的完全限定类名。
【讨论】: