Elasticsearch 5.1.1搜索高亮及Java API实现
来源:互联网 发布:手机使用统计软件 编辑:程序博客网 时间:2024/04/29 20:58
5.1.1的搜索高亮和2.X有所变化,但是变化不大。下面分四步来介绍:创建索引(设置mapping/IK分词)、索引文档、REST API的搜索高亮、JAVA API的搜索高亮。
注:从这篇博客开始,采用简写的代码风格,也就是Sence插件或者kibana的dev tools中采用的风格。(温馨提示:安装kibana 5.1.1,在dev tools中直接可以使用简单格式命令。)
一、创建索引
文档结构为blog/article/id。先创建一个空的index:
PUT blog
创建mapping:
POST blog/article/_mapping{ "article": { "_all": { "analyzer": "ik_max_word", "search_analyzer": "ik_max_word", "term_vector": "no", "store": "false" }, "properties": { "title": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word", "include_in_all": "true", "boost": 8 }, "content": { "type": "text", "analyzer": "ik_max_word", "search_analyzer": "ik_max_word", "include_in_all": "true", "boost": 4 } } }}
二、索引测试文档
加入三条文档到blog索引。
文档1:
POST blog/article/1{ "title":"java编程思想", "content":"《Java编程思想》这本书赢得了全球程序员的广泛赞誉"}
文档2:
POST blog/article/2{ "title":"手把手教你使用Git", "content":"这是一个非常容易上手的GIt详细教程"}
文档3:
POST blog/article/3{ "title":"java从入门到精通", "content":"《java从入门到精通》非常适合java初学"}
三、REST高亮API
我们查询title中含有java的文档,并用自定义高亮片段标记出来。
POST blog/_search{ "query": { "match": { "title": "java" } }, "highlight": { "fields": { "title": { "pre_tags": "<strong>", "post_tags": "</strong>" } } }}
查询结果:
"total": 2, "max_score": 2.3014567, "hits": [ { "_index": "blog", "_type": "article", "_id": "3", "_score": 2.3014567, "_source": { "title": "java从入门到精通", "content": "《java从入门到精通》非常适合java初学" }, "highlight": { "title": [ "<strong>java</strong>从入门到精通" ] } }, { "_index": "blog", "_type": "article", "_id": "1", "_score": 2.025282, "_source": { "title": "java编程思想", "content": "《Java编程思想》这本书赢得了全球程序员的广泛赞誉" }, "highlight": { "title": [ "<strong>java</strong>编程思想" ] } } ] }}
四、搜索高亮的java api实现
jar包导入请参考前面的的一篇博客Elasticsearch 5.X下JAVA API使用指南
写一个测试类:
package esjavapia5;import java.net.InetAddress;import java.net.UnknownHostException;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.client.transport.TransportClient;import org.elasticsearch.common.settings.Settings;import org.elasticsearch.common.text.Text;import org.elasticsearch.common.transport.InetSocketTransportAddress;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.SearchHit;import org.elasticsearch.search.SearchHits;import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;import org.elasticsearch.transport.client.PreBuiltTransportClient;public class Es5Highlight { public static void main(String[] args) throws UnknownHostException { // TODO Auto-generated method stub // 设置集群名称 Settings settings = Settings.builder() .put("cluster.name", "elasticsearch").build(); // 创建client TransportClient client = new PreBuiltTransportClient(settings) .addTransportAddress(new InetSocketTransportAddress( InetAddress.getByName("127.0.0.1"), 9300)); QueryBuilder matchQuery = QueryBuilders.matchQuery("title", "编程"); HighlightBuilder hiBuilder=new HighlightBuilder(); hiBuilder.preTags("<h2>"); hiBuilder.postTags("</h2>"); hiBuilder.field("title"); // 搜索数据 SearchResponse response = client.prepareSearch("blog") .setQuery(matchQuery) .highlighter(hiBuilder) .execute().actionGet(); //获取查询结果集 SearchHits searchHits = response.getHits(); System.out.println("共搜到:"+searchHits.getTotalHits()+"条结果!"); //遍历结果 for(SearchHit hit:searchHits){ System.out.println("String方式打印文档搜索内容:"); System.out.println(hit.getSourceAsString()); System.out.println("Map方式打印高亮内容"); System.out.println(hit.getHighlightFields()); System.out.println("遍历高亮集合,打印高亮片段:"); Text[] text = hit.getHighlightFields().get("title").getFragments(); for (Text str : text) { System.out.println(str.string()); } } }}
运行结果:
no modules loadedloaded plugin [org.elasticsearch.index.reindex.ReindexPlugin]loaded plugin [org.elasticsearch.percolator.PercolatorPlugin]loaded plugin [org.elasticsearch.script.mustache.MustachePlugin]loaded plugin [org.elasticsearch.transport.Netty3Plugin]loaded plugin [org.elasticsearch.transport.Netty4Plugin]共搜到:1条结果!String方式打印文档搜索内容:{ "title":"java编程思想", "content":"《Java编程思想》这本书赢得了全球程序员的广泛赞誉"}Map方式打印高亮内容{title=[title], fragments[[java<h2>编程</h2>思想]]}遍历高亮集合,打印高亮片段:java<em>编程</h2>思想
截图如下:
4 0
- Elasticsearch 5.1.1搜索高亮及Java API实现
- Elasticsearch 5.1.1搜索高亮及Java API实现
- 分布式搜索elasticsearch java API 之 highlighting (对搜索结果的高亮显示)
- elasticsearch java API ------搜索
- 分布式搜索elasticsearch java API
- 分布式搜索elasticsearch java API
- ElasticSearch入门-搜索(java api)
- [搜索]ElasticSearch Java Api(一)
- 分布式搜索elasticsearch java API 使用More like this实现
- ElasticSearch学习笔记(九)Java AP实现搜索,排序,高亮,分页
- Elasticsearch(五)elasticsearch高亮搜索
- elasticsearch实现搜索拼音然后高亮内容
- elasticsearch JAVA客户端操作---搜索的过滤、分组高亮
- Elasticsearch java api 基本搜索部分详解
- Elasticsearch java api 基本搜索部分
- elasticsearch java api 之搜索功能
- Elasticsearch java api 基本搜索部分详解
- Elasticsearch java api 基本搜索部分详解
- 新年促销扎堆,8个邮件营销方法打动你的客户
- springboot(三) 用druid连接mybatis
- 通讯录系统
- 使用exe4j打包jar为exe,运行闪退,无法看到错误信息
- iOS开发 Xcode8中遇到的问题及改动
- Elasticsearch 5.1.1搜索高亮及Java API实现
- 第44篇白板bug修复(一)
- 5-3 重要的话说三遍 (5分)
- IE 下bootstraptable表单搜索汉字失败
- 装Yii遇到的小问题
- swiper display:none 后 在显示 滑动问题
- Java中的Servelt讲解
- poj 3261 Milk Patterns (后缀数组)
- Golang开发环境搭建-Vim篇