0

我想以编程方式在 Lucene 中使用 DoubleMetaphone。

<dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-phonetic</artifactId>
            <version>4.4.0</version>
</dependency>

上面的包包含适当的类。

这个过滤器可以通过设置 xml 在 Solr 中使用。

但我希望它以编程方式在 Java 中使用。

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;

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

4

1 回答 1

0

要使用此过滤器,您需要创建自己的自定义分析器,类似于分析器文档中的示例。如果要添加变音位过滤器

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

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

此外,请记住,此过滤器需要在索引时和查询时应用,因此您需要使用此过滤器重新索引您的数据以索引变音位代码。

于 2013-09-30T15:26:29.170 回答