2012-07-11 68 views
1

如何使用fuzzyLikeThisFieldQuery在elasticsearch中突出显示结果查询?我可以选择fuzzyQuery而不是fuzzyLikeThisFieldQuery。例如,下面的代码中,我用fuzzyQuery:Elasticsearch/Lucene突出显示

QueryBuilder allquery = QueryBuilders.fuzzyQuery("name", "fooobar").minSimilarity(0.4f); 

SearchRequestBuilder builder = ds.getElasticClient() 
             .prepareSearch("data") 
             .setQuery(allquery) 
             .setFrom(0) 
             .setSize(10) 
             .setTypes("entity") 
             .setSearchType(SearchType.DEFAULT) 
             .addHighlightedField("name") 
             .addField("name"); 

    SearchResponse sr = builder.execute().actionGet(); 

结果是

If you want to have a <em>foobar</em> for oracle 

但是,如果使用fuzzyLikeThisFieldQuery,没有突出

QueryBuilder allquery = QueryBuilders.fuzzyLikeThisFieldQuery("name").likeText("fooobar").minSimilarity(0.4f); 

结果是

If you want to have a foobar for oracle 

任何k现在为什么?

回答

4

你需要调用这两个函数来设置荧光笔标记..

builder.setHighlighterPreTags("<pre>").setHighlighterPostTags("</pre>"); 
2

我需要强调的关键字,并使用我已经写在下面,我正常工作的方法:

searchRequest.setQuery(
     QueryBuilders.queryString(q)) 
     .addHighlightedField("title") 
     .addHighlightedField("text") 
     .setHighlighterPreTags("<em>") 
     .setHighlighterPostTags("</em>"); 
_searchResponse = searchRequest.execute().actionGet(); 

我用GSON解析响应字符串作为JSON对象,并投给我的实体象下面这样:

root = new JsonParser().parse(_searchResponse.toString()); 
p.results.add(root.getAsJsonObject().get("hits").getAsJsonObject().get("hits")); 

你会得到这样的回应:

content: { 
results: [ 
[ 
{ 
_index: "news", 
_type: "news", 
_id: "111", 
_score: 0.6056677, 
_source: { 
id: "1349298458", 
title: "Title text", 
text: "Detail text" 
}, 
highlight: { 
text: [ 
" some text <em>keyword</em> some text <em>keyword</em>- some text <em>keyword</em> some text." 
] 
} 
},... 

希望你得到它是如何工作,并尝试自己。