如何使用同义词过滤器和shingle过滤器?

时间:2014-09-07 14:46:31

标签: java elasticsearch synonym shingles

我正在尝试使用带有shingle过滤器的synonym过滤器(请参阅下面的代码)。这给了我输出:

  

强制执行

     

实施      

进行检查

     

考试测试

单词enforcedimplementedtestingexamination相同。是否可以获得以下输出?

  

强制执行

     

实施      

进行检查

     

进行测试

JSON定义

String json = jsonBuilder()
        .startObject()
                .field("number_of_shards", 1)
                .startObject("analysis")
                    .startObject("filter")
                        .startObject("my_shingle_filter")
                            .field("type","shingle")
                            .field("min_shingle_size",2)
                            .field("max_shingle_size",2)
                            .field("output_unigrams",false)
                        .endObject()
                        .startObject("my_syn_filter")
                            .field("type", "synonym")
                            .field("format","wordnet")
                            .field("synonyms_path","prolog/wn_s.pl")
                        .endObject()
                    .endObject()
                    .startObject("analyzer")
                        .startObject("my_shingle_analyzer")
                            .field("type", "custom")
                            .field("tokenizer","standard")
                            .field("filter",new String[]{"lowercase","my_syn_filter","my_shingle_filter"})
                        .endObject()
                    .endObject()
                .endObject()
        .endObject().string();

client.admin().indices().prepareCreate("testshingle").setSettings(ImmutableSettings.settingsBuilder()
        .loadFromSource(json))
            .execute().actionGet();

AnalyzeResponse  resp= client.admin().indices().prepareAnalyze("testshingle", "implemented for testing").setAnalyzer("my_shingle_analyzer").execute().get();
for(AnalyzeToken token:resp.getTokens()){
    System.out.println(token.getTerm());
}

0 个答案:

没有答案