使用Lucene中的DoubleMetaphoneFilter进行过滤

时间:2013-09-30 12:03:15

标签: filter lucene

我想以编程方式在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;

但我不知道我是如何使用过滤器的。

1 个答案:

答案 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)
    }
}

当然,这只是一个例子。然而,设置分析器对您要编制索引的数据有意义。

另外,请记住,此过滤器需要在索引时以及查询时应用,因此您需要使用此过滤器重新索引数据,以便为变音符代码编制索引。