es中java代码高亮显示_Java代码操作Elasticsearch

创建maven项目,导入依赖

junit

junit

4.11

org.elasticsearch

elasticsearch

5.6.8

org.elasticsearch.client

transport

5.6.8

com.alibaba

fastjson

1.2.58

com.fasterxml.jackson.core

jackson-core

2.9.8

com.fasterxml.jackson.core

jackson-databind

2.9.8

com.fasterxml.jackson.core

jackson-annotations

2.9.8

连接所有方法都要用,提成公共方法

public TransportClient getClient() throwsUnknownHostException {//步骤一:创建一个Settings对象,指定集群名字

Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();//步骤二:创建一个Client连接对象

TransportClient client = newPreBuiltTransportClient(settings);//步骤三:连接到ES服务器

client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));

client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301));

client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302));returnclient;

}

1.创建一个空的索引库

/*** 创建空的索引库*/@Testpublic void createNullIndex() throwsUnknownHostException {

TransportClient client=getClient();//创建一个空的索引库 admin()管理权限 indices()索引库 prepareCreate()创建一个索引库 get()执行之前的操作请求

client.admin().indices().prepareCreate("y2170").get();//关闭client对象

client.close();

}

2.索引库指定Mapping信息

2.1 利用XContentBuilder对象拼接JSON字符串

2.2 手动用过字符串拼接得到JSON字符串

{"hello":{"properties":{"id":{"type":"long","store":true,"index":"not_analyzed"},"title":{"type":"text","store":true,"index":"analyzed","analyzer":"ik_max_word"},"content":{"type":"text","store":true,"index":"analyzed","analyzer":"ik_max_word"}

}

}

}

案例:

/*** 指定索引库的Mapping信息*/@Testpublic void createMappingByIndex() throwsIOException {

TransportClient client=getClient();//创建一个XContentBuilder对象,用于拼接JSON格式字符串

XContentBuilder xContentBuilder =XContentFactory.jsonBuilder();

xContentBuilder.startObject().startObject("hello").startObject("properties")

.startObject("id").field("type","long").field("store",true).field("index","not_analyzed").endObject()

.startObject("title").field("type","text").field("store",true).field("index","analyzed").field("analyzer","ik_max_word").endObject()

.startObject("content").field("type","text").field("store",true).field("index","analyzed").field("analyzer","ik_max_word").endObject()

.endObject().endObject().endObject();//指定索引库以及Type类型的Mapping映射信息 preparePutMapping代表向哪一个索引库指定mpiing信息 setType代表该索引库下的TYPE,与上方JSON创建的Type保持一致//setSource 指定JSON字符串的存储对象 get执行

client.admin().indices().preparePutMapping("y2170").setType("hello").setSource(xContentBuilder).get();//关闭资源

client.close();

}

e39b6bc4af30e9824e3f8c04bef3da9e.png

3.创建索引库同时指定Mapping信息

/*** 创建索引库并且指定Mapping信息*/@Testpublic void createIndexAndMapping() throwsIOException {

TransportClient client=getClient();//创建索引库

client.admin().indices().prepareCreate("wdksoft").get();//创建Mapping信息//创建一个XContentBuilder对象,用于拼接JSON格式字符串

XContentBuilder xContentBuilder =XContentFactory.jsonBuilder();

xContentBuilder.startObject().startObject("article").startObject("properties")

.startObject("id").field("type","long").field("store",true).field("index","not_analyzed").endObject()

.startObject("title").field("type","text").field("store",true).field("index","analyzed").field("analyzer","ik_max_word").endObject()

.startObject("content").field("type","text").field("store",true).field("index","analyzed").field("analyzer","ik_max_word").endObject()

.endObject().endObject().endObject();

client.admin().indices().preparePutMapping("wdksoft").setType("article").setSource(xContentBuilder).get();//关闭资源

client.close();

}

4.删除索引库

/*** 删除索引库*/@Testpublic void deleteIndex() throwsUnknownHostException {

TransportClient client=getClient();//删除索引库

client.admin().indices().prepareDelete("wdksoft").get();//关闭资源

client.close();

}

5.创建文档-通过XContentBuilder对象拼接JSON格式字符串

(  {  ) 开头用.startObject()

(  }  )结尾用.endObject()

域用.field(键,值),多个就继续在后面追加

/*** 创建文档-通过XContentBuilder对象拼接JSON字符串*/@Testpublic void createDocumentByXC() throwsIOException {

TransportClient client=getClient();//构建文档信息

XContentBuilder xContentBuilder =XContentFactory.jsonBuilder();

xContentBuilder.startObject().field("id",1).field("title","Lucene是apache软件基金会4 jakarta项目组的一个子项目")

.field("content","Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的")

.endObject();//创建文档

client.prepareIndex("y2170","hello","1").setSource(xContentBuilder).get();

client.close();

}

ada4504d2739877e3d207e4ce0c65dbd.png

6.创建文档-通过对象转换为JSON字符串

Hello类

public classHello {private Integer id; //属性要跟Type的域的名字一致

privateString title;privateString content;publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getTitle() {returntitle;

}public voidsetTitle(String title) {this.title =title;

}publicString getContent() {returncontent;

}public voidsetContent(String content) {this.content =content;

}publicHello(Integer id, String title, String content) {this.id =id;this.title =title;this.content =content;

}publicHello() {

}

}

/*** 创建文档-通过对象转换成JSON字符串

* fastjson String helloJson = JSON.toJSONString(hello);

* jackson

* ObjectMapper objectMapper=new ObjectMapper();

* String helloJson = objectMapper.writeValueAsString(hello);*/@Testpublic void createDocumentByObject() throwsUnknownHostException, JsonProcessingException {

TransportClient client=getClient();//准备一个数据(文档)对象

Hello hello=new Hello(3,"ElasticSearch是一个基于Lucene的搜索服务器","ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用");//将对象转换为JSON格式字符串 fastjson

/*String helloJson = JSON.toJSONString(hello);

System.out.println(helloJson);*/

//利用jackson转换

ObjectMapper objectMapper=newObjectMapper();

String helloJson=objectMapper.writeValueAsString(hello);//向索引库中添加文档数据

client.prepareIndex("y2170","hello","3").setSource(helloJson, XContentType.JSON).get();

client.close();

}

7.删除文档

/*** 删除文档*/@Testpublic void deleteDocument() throwsUnknownHostException, JsonProcessingException {

TransportClient client=getClient();//删除文档

client.prepareDelete("y2170","hello","4").get();

client.close();

}

8.查询文档-根据文档ID查询

/*** 根据文档ID进行查询*/@Testpublic void getDocumentByID() throwsUnknownHostException, JsonProcessingException {

TransportClient client=getClient();//执行查询,可查询多个

SearchResponse searchResponse = client.prepareSearch("y2170").setTypes("hello").setQuery(

QueryBuilders.idsQuery().addIds("1", "2")

).get();//获取到查询结果

SearchHits hits =searchResponse.getHits();//如果返回数据较多,默认进行分页,默认10条数据

System.out.println("获取到文档数据条目数:"+hits.getTotalHits());//获取到文档数据

Iterator iterator =hits.iterator();while(iterator.hasNext()){

SearchHit hit=iterator.next();

System.out.println(hit.getSourceAsString());

System.out.println("content:"+hit.getSource().get("content"));

}

client.close();

}

9.查询文档-根据Term关键词查询

/*** 根据Term分词进行查询*/@Testpublic void getDocumentByTerm() throwsUnknownHostException, JsonProcessingException {

TransportClient client=getClient();//执行查询,可查询多个

SearchResponse searchResponse = client.prepareSearch("y2170").setTypes("hello").setQuery(

QueryBuilders.termQuery("title","服务器")

).get();//获取到查询结果

SearchHits hits =searchResponse.getHits();//如果返回数据较多,默认进行分页,默认10条数据

System.out.println("获取到文档数据条目数:"+hits.getTotalHits());//获取到文档数据

Iterator iterator =hits.iterator();while(iterator.hasNext()){

SearchHit hit=iterator.next();

System.out.println(hit.getSourceAsString());

System.out.println("content:"+hit.getSource().get("content"));

}

client.close();

}

10.查询文档-根据QueryString查询文档

@Testpublic void getDocumentByQueryString() throwsUnknownHostException, JsonProcessingException {

TransportClient client=getClient();//执行查询

SearchResponse searchResponse = client.prepareSearch("y2170").setTypes("hello").setQuery(

QueryBuilders.queryStringQuery("Solr是一个独立的企业级搜索应用服务器")

).get();//获取到查询结果

SearchHits hits =searchResponse.getHits();//如果返回数据较多,默认进行分页,默认10条数据

System.out.println("获取到文档数据条目数:"+hits.getTotalHits());//获取到文档数据

Iterator iterator =hits.iterator();while(iterator.hasNext()){

SearchHit hit=iterator.next();

System.out.println(hit.getSourceAsString());

System.out.println("content:"+hit.getSource().get("content"));

}

client.close();

}

11.查询数据的分页检索

ES当中默认检索数据是10条

/*** 分页*/@Testpublic void getDocumentByQueryStringlimit() throwsUnknownHostException, JsonProcessingException {

TransportClient client=getClient();//设置查询条件

SearchRequestBuilder searchRequestBuilder = client.prepareSearch("y2170").setTypes("hello").setQuery(

QueryBuilders.queryStringQuery("服务器")

);//加入分页规则 setFrom代表从那一条数据开始获取

searchRequestBuilder.setFrom(0).setSize(5);

SearchResponse searchResponse=searchRequestBuilder.get();//获取到查询结果

SearchHits hits =searchResponse.getHits();//如果返回数据较多,默认进行分页,默认10条数据

System.out.println("获取到文档数据条目数:" +hits.getTotalHits());//获取到文档数据

Iterator iterator =hits.iterator();while(iterator.hasNext()) {

SearchHit hit=iterator.next();

System.out.println(hit.getSourceAsString());

System.out.println("content:" + hit.getSource().get("content"));

}

client.close();

}

0c804e95d046383e2178f870da55ca72.png

12.查询数据的高亮显示

执行查询数据之前设置高亮显示规则

1.设置高亮显示的域

2.设置高亮显示前缀

3.设置高亮显示后缀

执行查询

获取到高亮显示的数据

/*** 高亮显示*/@Testpublic void getDocumentByQueryHight() throwsUnknownHostException, JsonProcessingException {

TransportClient client=getClient();//设置查询条件

SearchRequestBuilder searchRequestBuilder = client.prepareSearch("y2170").setTypes("hello").setQuery(

QueryBuilders.termQuery("title", "服务器")

);//加入分页规则 setFrom代表从那一条数据开始获取

searchRequestBuilder.setFrom(0).setSize(5);//设置高亮规则

HighlightBuilder highlightBuilder=newHighlightBuilder();//指定高亮显示的域

highlightBuilder.field("title");

highlightBuilder.preTags("");

highlightBuilder.postTags("");

searchRequestBuilder.highlighter(highlightBuilder);//执行查询

SearchResponse searchResponse =searchRequestBuilder.get();//获取到查询结果

SearchHits hits =searchResponse.getHits();//如果返回数据较多,默认进行分页,默认10条数据

System.out.println("获取到文档数据条目数:" +hits.getTotalHits());//获取到文档数据

Iterator iterator =hits.iterator();while(iterator.hasNext()) {

SearchHit hit=iterator.next();

System.out.println(hit.getSourceAsString());/*System.out.println("content:" + hit.getSource().get("content"));*/

//获取高亮结果

Text[] titles = hit.getHighlightFields().get("title").getFragments();for(Text text:titles){

System.out.println("高亮显示数据为:"+text);

}

}

client.close();

}

数据到网页中,通过改变样式

就可达到高亮显示数据的目的

0439bf88f2c32ecc23ea2b43c4e1116d.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值