我正在尝试使用带有shingle
过滤器的synonym
过滤器(请参阅下面的代码)。这给了我输出:
强制执行
为
实施进行检查
考试测试
单词enforced
和implemented
与testing
和examination
相同。是否可以获得以下输出?
强制执行
为
实施进行检查
进行测试
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());
}