如何在elasticsearch中使用fuzzyLikeThisFieldQuery突出显示结果查询?我可以选择fuzzyQuery而不是fuzzyLikeThisFieldQuery。例如,在下面的代码中我使用了fuzzyQuery:
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
任何人都知道为什么?
答案 0 :(得分:4)
您需要调用这两个函数来设置荧光笔标记..
builder.setHighlighterPreTags("<pre>").setHighlighterPostTags("</pre>");
答案 1 :(得分: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."
]
}
},...
希望你了解它是如何运作的并亲自尝试。