1. 使用Kibana建立索引和映射及文档
PUT /ems
{
"mappings":{
"emp":{
"properties":{
"name":{
"type":"text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"age":{
"type":"integer"
},
"bir":{
"type":"date"
},
"content":{
"type":"text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"address":{
"type":"keyword"
}
}
}
}
}
PUT /ems/emp/_bulk
{"index":{}}
{"name":"小黑","age":23,"bir":"2012-12-12","content":"为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平","address":"北京"}
{"index":{}}
{"name":"王小黑","age":24,"bir":"2012-12-12","content":"Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式","address":"上海"}
{"index":{}}
{"name":"张小五","age":8,"bir":"2012-12-12","content":"Spring Cloud 作为Java 语言的微服务框架,它依赖于Spring Boot,有快速开发、持续交付和容易部署等特点。Spring Cloud 的组件非常多,涉及微服务的方方面面,井在开源社区Spring 和Netflix 、Pivotal 两大公司的推动下越来越完善","address":"无锡"}
{"index":{}}
{"name":"win7","age":9,"bir":"2012-12-12","content":"Spring的目标是致力于全方位的简化Java开发。 这势必引出更多的解释, Spring是如何简化Java开发的?","address":"南京"}
{"index":{}}
{"name":"梅超风","age":43,"bir":"2012-12-12","content":"Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API","address":"杭州"}
{"index":{}}
{"name":"张无忌","age":59,"bir":"2012-12-12","content":"ElasticSearch是一个基于Lucene的搜索服务器。碰瓷了,它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口","address":"北京"}
{"index":{}}
{"name":"开源框架全集","age":59,"bir":"2012-12-12","content":"spring springcloud springboot springdata 这是开源框架的技术栈之一,还有很多开源技术值得我们学习","address":"开源框架团队"}
2. 使用IDEA进行案例测试
TransportClient transportClient;
@Before
public void before() throws UnknownHostException {
this.transportClient = new PreBuiltTransportClient(Settings.EMPTY);
transportClient.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.116.128"),9300));
}
@After
public void after(){
transportClient.close();
}
@Test
public void testSearch() {
SearchResponse searchResponse = transportClient.prepareSearch("ems")
.setTypes("emp")
.setFrom(0)
.setSize(20)
.addSort("age", SortOrder.DESC)
.setSource(SearchSourceBuilder.searchSource().fetchSource("*", "bir"))
.setPostFilter(QueryBuilders.rangeQuery("age").gte(0).lte(100))
.setQuery(QueryBuilders.multiMatchQuery("框架爱好者", "name", "content"))
.highlighter(new HighlightBuilder().field("*").requireFieldMatch(false).preTags("<span style='color:red;'>").postTags("</span>"))
.get();
long totalHits = searchResponse.getHits().getTotalHits();
System.out.println("符合条件的总条数:" + totalHits);
float maxScore = searchResponse.getHits().getMaxScore();
System.out.println("最大分数:" + maxScore);
SearchHit[] hits = searchResponse.getHits().getHits();
for (SearchHit hit : hits) {
System.out.println("原始文档:" + hit.getSourceAsString());
System.out.println("高亮字段:" + hit.getHighlightFields());
}
}
3. 测试结果
符合条件的总条数:3
最大分数:0.9331132
原始文档:{"address":"开源框架团队","name":"开源框架全集","age":59,"content":"spring springcloud springboot springdata 这是开源框架的技术栈之一,还有很多开源技术值得我们学习"}
高亮字段:{name=[name], fragments[[开源<span style='color:red;'>框架</span>全集]], content=[content], fragments[[spring springcloud springboot springdata 这是开源<span style='color:red;'>框架</span>的技术栈之一,还有很多开源技术值得我们学习]]}
原始文档:{"address":"北京","name":"小黑","age":23,"content":"为开发团队选择一款优秀的MVC框架是件难事儿,在众多可行的方案中决择需要很高的经验和水平"}
高亮字段:{content=[content], fragments[[为开发团队选择一款优秀的MVC<span style='color:red;'>框架</span>是件难事儿,在众多可行的方案中决择需要很高的经验和水平]]}
原始文档:{"address":"上海","name":"王小黑","age":24,"content":"Spring 框架是一个分层架构,由 7 个定义良好的模块组成,这是一个开源框架,她非常不错,使用真的很方便"}
高亮字段:{content=[content], fragments[[Spring <span style='color:red;'>框架</span>是一个分层架构,由 7 个定义良好的模块组成,这是一个开源<span style='color:red;'>框架</span>,她非常不错,使用真的很方便]]}