我想以编程方式在Lucene中使用DoubleMetaphone。
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-phonetic</artifactId>
<version>4.4.0</version>
</dependency>
上述包中包含适当的类。
此过滤器可以通过设置xml在Solr中使用。
但我希望它在Java programmaticaly中使用。
analyzer = new StandardAnalyzer(Version.LUCENE_44);
String field = "title";
Query q = new QueryParser(Version.LUCENE_44, field, analyzer).parse(querystr);
int hitsPerPage = 100;
IndexReader reader = DirectoryReader.open(index);
IndexSearcher searcher = new IndexSearcher(reader);
TopScoreDocCollector collector = TopScoreDocCollector.create(hitsPerPage, true);
searcher.search(q, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
但我不知道我是如何使用过滤器的。
答案 0 :(得分:0)
要使用此过滤器,您需要创建自己的自定义分析器,类似于Analyzer documentation中的示例。如果要将变音符过滤器添加到
Analyzer analyzer = new Analyzer() {
@Override
protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
final StandardTokenizer source = new StandardTokenizer(Version.LUCENE_44, reader);
source.setMaxTokenLength(StandardAnalyzer.DEFAULT_MAX_TOKEN_LENGTH);
TokenStream filter = new StandardFilter(Version.LUCENE_44, filter);
filter = new LowerCaseFilter(Version.LUCENE_44, filter);
filter = new StopFilter(Version.LUCENE_44, filter, StopAnalyzer.ENGLISH_STOP_WORDS_SET);
filter = new DoubleMetaphoneFilter(filter, 4, true);
return new TokenStreamComponents(source, filter)
}
}
当然,这只是一个例子。然而,设置分析器对您要编制索引的数据有意义。
另外,请记住,此过滤器需要在索引时以及查询时应用,因此您需要使用此过滤器重新索引数据,以便为变音符代码编制索引。