HighlightBuilder高亮显示
来源:互联网 发布:手办数据库 编辑:程序博客网 时间:2024/05/29 09:29
ES上存在如下数据
如果想查询interest中含有basketball的文档,并对basketball进行高亮,ES查询语句如下
GET my_index/my_type/_search{ "query": { "match": { "interest": "basketball" } }, "highlight":{ "fields": { "interest": {} } }, "size": 10}从搜索结果中可以看出basketball前后加上了<em></em>,对basketball进行了高亮
下面用JAVA代码实现搜索结果的高亮
1.创建带有高亮的搜索方法,实现高亮可以使用HighlightBuilder
public class ElasticsearchUtils { private Client client; public ElasticsearchUtils(String clusterName, String ipAddress) { Settings settings = ImmutableSettings .settingsBuilder() //设置集群名称 .put("cluster.name", clusterName) .put("client.transport.ignore_cluster_name", false) .put("node.client", true).put("client.transport.sniff", true) .build(); client = new TransportClient(settings) .addTransportAddress(new InetSocketTransportAddress(ipAddress, 9300)); } /** * 执行搜索(带高亮) * @param indexname 索引名称 * @param type 索引类型 * @param queryBuilder 查询条件 * @param highligtFiled 高亮字段 * @return */ public SearchResponse searcherHighlight(String indexName, String typeName, QueryBuilder queryBuilder, String highligtFiled) { SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();//构造搜索对象 searchSourceBuilder.query(queryBuilder);//设置查询条件 //设置高亮 String preTags = "<strong>"; String postTags = "</strong>"; HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.preTags(preTags);//设置前缀 highlightBuilder.postTags(postTags);//设置后缀 highlightBuilder.field(highligtFiled);//设置高亮字段 searchSourceBuilder.highlight(highlightBuilder);//设置高亮信息 SearchRequest searchRequest = new SearchRequest(indexName);//创建查询请求对象 searchRequest.types(typeName);//设置type searchRequest.extraSource(searchSourceBuilder);//设置searchSourceBuilder SearchResponse searchResponse = client.search(searchRequest) .actionGet();//执行查询 return searchResponse; }}
2.创建测试类
public class HighlightTest { public static void main(String[] args) { //创建对象,设置集群名称和IP地址 ElasticsearchUtils es = new ElasticsearchUtils("im_shanmenglu", "localhost"); String indexName = "my_index";//索引名称 String typeName = "my_type";//类型名称 String highligtFiled = "interest";//设置高亮的字段,此处查询的是interest中含有basketball的文档,因此高亮字段设为interest QueryBuilder queryBuilder = QueryBuilders.matchQuery("interest", "basketball");//查询interest中含有basketball的文档 SearchResponse searchResponse = es.searcherHighlight(indexName, typeName, queryBuilder, highligtFiled); SearchHits hits = searchResponse.getHits(); SearchHit[] searchHits = hits.getHits(); for (SearchHit searchHit : searchHits) { Map<String, HighlightField> map = searchHit.getHighlightFields(); System.out.println(map.toString()); } }}
searchResponse的结果如下,可以看到highlight中的basketball前后已经加上了设置的前缀和后缀
{ "took" : 1, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 0.19178301, "hits" : [ { "_index" : "my_index", "_type" : "my_type", "_id" : "1", "_score" : 0.19178301, "_source":{ "name": "a", "interest": "football basketball"}, "highlight" : { "interest" : [ "football <strong>basketball</strong>" ] } }, { "_index" : "my_index", "_type" : "my_type", "_id" : "2", "_score" : 0.19178301, "_source":{ "name": "b", "interest": "music basketball"}, "highlight" : { "interest" : [ "music <strong>basketball</strong>" ] } } ] }}
控制台输出结果如下:
{interest=[interest], fragments[[football <strong>basketball</strong>]]}{interest=[interest], fragments[[music <strong>basketball</strong>]]}
0 0
- HighlightBuilder高亮显示
- php 高亮 显示
- 高亮显示关键词
- 表格高亮显示
- 高亮显示
- BlackWord高亮显示
- lucene 高亮显示
- 搜索关键词高亮显示
- Eclipse高亮显示
- Eclipse 高亮显示
- 高亮显示_1
- 高亮显示_2
- CUDA高亮显示
- 高亮显示关键字
- 高亮显示关键字
- 高亮显示关键字
- 高亮显示关键字
- 高亮显示
- Mybatis自动生成key值(selectKey和useGeneratedKeys)
- 漫步数学分析一——实数轴
- LINUX系统简单指令的介绍和使用(初学者)
- RFID技术
- YII model使用
- HighlightBuilder高亮显示
- MATLAB作图方法与技巧(二)
- 纯CSS绘制三角形(各种角度)
- {题解}[jzoj4915] 【GDOI2017模拟12.9】最长不下降子序列
- myfocus - 网站焦点图制作
- 文字溢出处理
- cocos-Lua加载plist文件
- 关于C#委托的一些学习笔记(代码word打的未对齐)
- halcon标定代码注解