2012-07-11 67 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." 
] 
} 
},... 

希望你得到它是如何工作,並嘗試自己。