Solr 用于索引和查询的Lucene自定义分析器

Solr 用于索引和查询的Lucene自定义分析器,solr,lucene,Solr,Lucene,我正在研究lucene 4.7,并尝试迁移我们在solr配置中使用的一个分析器 但是,我就是不知道如何在上面的配置中使用HTMLStripCharFilterFactory和WordDelimiterFilterFactory。另外,对于我在solr中的查询,我的分析器如下所示,如何在lucene中实现相同的查询 说明了如何使用字符过滤器。在重写的initReader方法中包装读取器 我假设您的WordDelimiterFilter的问题在于您不知道如何设置正在使用的配置选项?通过将适当的

我正在研究lucene 4.7,并尝试迁移我们在solr配置中使用的一个分析器


但是,我就是不知道如何在上面的配置中使用HTMLStripCharFilterFactory和WordDelimiterFilterFactory。另外,对于我在solr中的查询,我的分析器如下所示,如何在lucene中实现相同的查询


说明了如何使用
字符过滤器。在重写的
initReader
方法中包装读取器

我假设您的
WordDelimiterFilter
的问题在于您不知道如何设置正在使用的配置选项?通过将适当的常量与二进制and(
&
)组合,可以构造一个int来传递到构造函数中。例如:

int config=WordDelimiterFilter.GENERATE\u NUMBER\u PARTS&WordDelimiterFilter.GENERATE\u WORD\u PARTS//等
因此,最终你可能会得到如下结果:

//StopwordAnalyzerBase为您提供了一些方便的方法来处理停止词集。
公共类MyAnalyzer扩展了StopwordAnalyzerBase{
私有最终版本=Version.LUCENE_47;
私有int-wordDelimiterConfig;
公共MyAnalyzer()引发IOException{
super(版本,loadStopwordSet(新文件阅读器(“stopwords.txt”),匹配版本);
//最好先加载这个配置,再加上停止字
wordDelimiterConfig=
WordDelimiterFilter.GENERATE\u WORD\u部件&
WordDelimiterFilter.GENERATE\u NUMBER\u部件&
WordDelimiterFilter.CATENATE\u单词&
WordDelimiterFilter.CATENATE\u编号&
WordDelimiterFilter.PRESERVE_原件;
}
@凌驾
受保护的TokenStreamComponents createComponents(字符串字段名、读卡器){
标记器源=新的空白标记器(版本,读取器);
TokenStream筛选器=新的WordDelimiterFilter(源,wordDelimiterConfig,null);
过滤器=新的小写过滤器工厂(版本,过滤器);
过滤器=新的停止过滤器(版本、过滤器、停止字);
过滤器=新PorterStemFilter(过滤器);
返回新组件(源、筛选器);
}
@凌驾
受保护的读卡器initReader(字符串字段名,读卡器){
返回新的HTMLStripCharFilter(读取器);
}
}
注意:我已将
停止过滤器
移动到
小写过滤器
之后。这使得它不区分大小写,只要停止词定义都是小写的。不知道这是否是由于
WordDelimiterFilter
导致的问题。如果是这样的话,就有一个,但坦率地说,我不知道如何使用它