我是Elasticsearch的新手。我希望在Java客户端中获得突出显示的字段。如果我在Windows提示符下运行以下查询:
{
"query": {
"filtered" : {
"query" : {
"term" : {
"title" : "western"
}
},
"filter" : {
"term" : { "year" : 1961 }
}
}
},
"highlight" : {
fields" : {
"title" : {}
}
}
}
我得到了很好的突出显示文字如下:
{
"_index" : "book",
"_type" : "history",
"_id" : "1",
"_score" : 0.095891505,
"_source":{ "title": "All Quiet on the Western great Front", "year": 1961}
"highlight" : {
"title" : [ "All Quiet on the <em>Western</em> great Front dead" ]
}
}
亮点
"highlight" : {
"title" : [ "All Quiet on the <em>Western</em> great Front dead" ]
}
可以很容易地转换为Java Map对象,&#34; title&#34; property包含匹配字段的整个文本,这正是我想要的。
但是,在Java客户端中,我得到突出显示的片段,它将同一字段的突出显示文本的不同段放入文本数组中。
谢谢和问候。
答案 0 :(得分:9)
在Java API中,返回的默认片段数为5.因此,如果您只想要返回一个片段,则需要设置它。
client.prepareSearch("book")
.setTypes("history")
.addHighlightedField("title")
.setQuery(query)
.setHighlighterFragmentSize(2000)
.setHighlighterNumOfFragments(1);
答案 1 :(得分:1)
这是我发现的,我不确定这是正确的还是最佳的解决方案。在Java客户端中,使用setHighlighterFragmentSize方法:
SearchResponse sr = client.prepareSearch("book")
.setTypes("history")
.addHighlightedField("title")
.setQuery(query)
.setHighlighterFragmentSize(2000) //set it larger than the size of the field so that the only one fragment is returned and it contains the entire text of the field.
我真的很想听听那里的专家说什么,并选择他们的回答作为答案。
问候。
答案 2 :(得分:1)
您还可以将片段数设置为0,这将显示带有突出显示标签的整个字段。这也将忽略fragment_size。
.setHighlighterNumOfFragments(0)