【问题标题】:Filtering with DoubleMetaphoneFilter in Lucene在 Lucene 中使用 DoubleMetaphoneFilter 进行过滤
【发布时间】:2013-09-30 23:26:29
【问题描述】:

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

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

【问题讨论】:

    标签: filter lucene


    【解决方案1】:

    要使用此过滤器,您需要创建自己的自定义分析器,类似于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)
        }
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多