需求
对es中的数据进行全文检索,并对返回结果进行高亮显示。
检索、高亮代码
问题
用如下这样的term方式,可以高亮
.setQuery(QueryBuilders.termQuery("PARAM_NAME", "a"))
{
"query": {
"term": {
"body.priority": "error"
}
},
"highlight" : {
"fields" : {
"*" : {}
}
}
}
用如下这样queryString方式,高亮无效
.queryStringQuery("asdf"))
{
"query" : {
"query_string" : {
"query" : "ERROR"
}
},
"highlight" : {
"fields" : {
"*" : {}
}
}
}
解决
增加require_field_match:false,之后匹配的field设置为false之后可以高亮了。
{
"query": {
"query_string": {
"query": "test"
}
},
"highlight": {
"require_field_match": false,
"explain": true,
"fields": {
"*": {}
}
}
}
api修改
String query = "{\"query\": {\"query_string\": {\"query\": \"test\"}}}";
SearchRequestBuilder builder = client.prepareSearch("twitter").setTypes("tweet").setQuery(query)
.addHighlightedField("*")
.setHighlighterRequireFieldMatch(false)
.setSize(10);
SearchResponse response = builder.execute().actionGet();
参考
Elasticsearch Reference [2.4] » Search APIs » Request Body Search » Highlighting
Elasticsearch query_string hit field
ElasticSearch highlight showing wrong field