创建maven项目,导入依赖

     <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.6.8</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.8</version>
</dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency> <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.8</version>
</dependency>

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

public TransportClient getClient() throws UnknownHostException {
//步骤一:创建一个Settings对象,指定集群名字
Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();
//步骤二:创建一个Client连接对象
TransportClient client = new PreBuiltTransportClient(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));
return client;
}

  1.创建一个空的索引库

/**
* 创建空的索引库
*/
@Test
public void createNullIndex() throws UnknownHostException {
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信息
*/
@Test
public void createMappingByIndex() throws IOException {
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();
}

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

            /**
* 创建索引库并且指定Mapping信息
*/
@Test
public void createIndexAndMapping() throws IOException {
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.删除索引库

 /**
* 删除索引库
*/
@Test
public void deleteIndex() throws UnknownHostException {
TransportClient client = getClient();
//删除索引库
client.admin().indices().prepareDelete("wdksoft").get(); //关闭资源
client.close();
}

5.创建文档-通过XContentBuilder对象拼接JSON格式字符串
       (  {  ) 开头用.startObject()

  (  }  )结尾用.endObject()

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

 /**
* 创建文档-通过XContentBuilder对象拼接JSON字符串
*/
@Test
public void createDocumentByXC() throws IOException {
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();
}

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

Hello类

public class Hello {
private Integer id; //属性要跟Type的域的名字一致
private String title;
private String content; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
} public Hello(Integer id, String title, String content) {
this.id = id;
this.title = title;
this.content = content;
} public Hello() {
}
}
/**
* 创建文档-通过对象转换成JSON字符串
* fastjson String helloJson = JSON.toJSONString(hello);
* jackson
* ObjectMapper objectMapper=new ObjectMapper();
* String helloJson = objectMapper.writeValueAsString(hello);
*/
@Test
public void createDocumentByObject() throws UnknownHostException, 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=new ObjectMapper();
String helloJson = objectMapper.writeValueAsString(hello);
//向索引库中添加文档数据
client.prepareIndex("y2170","hello","3").setSource(helloJson, XContentType.JSON).get();
client.close();
}

7.删除文档

            /**
* 删除文档
*/
@Test
public void deleteDocument() throws UnknownHostException, JsonProcessingException {
TransportClient client = getClient(); //删除文档
client.prepareDelete("y2170","hello","4").get(); client.close();
}

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

/**
* 根据文档ID进行查询
*/
@Test
public void getDocumentByID() throws UnknownHostException, 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<SearchHit> 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分词进行查询
*/
@Test
public void getDocumentByTerm() throws UnknownHostException, 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<SearchHit> 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查询文档

 @Test
public void getDocumentByQueryString() throws UnknownHostException, 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<SearchHit> 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条

 /**
* 分页
*/
@Test
public void getDocumentByQueryStringlimit() throws UnknownHostException, 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<SearchHit> 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();
}

12.查询数据的高亮显示
            执行查询数据之前设置高亮显示规则
                1.设置高亮显示的域
                2.设置高亮显示前缀
                3.设置高亮显示后缀
            执行查询
            获取到高亮显示的数据

  /**
* 高亮显示
*/
@Test
public void getDocumentByQueryHight() throws UnknownHostException, JsonProcessingException {
TransportClient client = getClient();
//设置查询条件
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("y2170").setTypes("hello").setQuery(
QueryBuilders.termQuery("title", "服务器")
);
//加入分页规则 setFrom代表从那一条数据开始获取
searchRequestBuilder.setFrom(0).setSize(5);
//设置高亮规则
HighlightBuilder highlightBuilder=new HighlightBuilder();
//指定高亮显示的域
highlightBuilder.field("title");
highlightBuilder.preTags("<span style='color:red'>");
highlightBuilder.postTags("</span>");
searchRequestBuilder.highlighter(highlightBuilder);
//执行查询
SearchResponse searchResponse = searchRequestBuilder.get();
//获取到查询结果
SearchHits hits = searchResponse.getHits();
//如果返回数据较多,默认进行分页,默认10条数据
System.out.println("获取到文档数据条目数:" + hits.getTotalHits());
//获取到文档数据
Iterator<SearchHit> 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();
}

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

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

Java代码操作Elasticsearch的更多相关文章

  1. Elasticsearch入门系列~通过Java一系列操作Elasticsearch

    Elasticsearch索引的创建.数据的增删该查操作 上一章节已经在Linux系统上安装Elasticsearch并且可以外网访问,这节主要通过Java代码操作Elasticsearch 1.创建 ...

  2. 使用Java客户端操作elasticsearch(二)

    承接上文,使用Java客户端操作elasticsearch,本文主要介绍 常见的配置 和Sniffer(集群探测) 的使用. 常见的配置 前面已介绍过,RestClientBuilder支持同时提供一 ...

  3. Java代码操作HDFS测试类

    1.Java代码操作HDFS需要用到Jar包和Java类 Jar包: hadoop-common-2.6.0.jar和hadoop-hdfs-2.6.0.jar Java类: java.net.URL ...

  4. 使用java代码操作Redis

    1导入pom.xml依赖 <dependency> <groupId>redis.clients</groupId> <artifactId>jedis ...

  5. java代码操作Redis

    1.导入需要的pom依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEn ...

  6. Java代码操作zookeeper

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  7. Java代码解决ElasticSearch的Result window is too large问题

    调用ElasticSearch做分页查询时报错: QueryPhaseExecutionException[Result window is too large, from + size must b ...

  8. 分享知识-快乐自己:java代码 操作 solr

    POM 文件: <!-- solr客户端 --> <dependency> <groupId>org.apache.solr</groupId> < ...

  9. 大数据之路week07--day01(HDFS学习,Java代码操作HDFS,将HDFS文件内容存入到Mysql)

    一.HDFS概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 ...

随机推荐

  1. 在VMware中如何清理多余的空间

    问题描述 平时用的编程计算机只有250G空间,c盘和d盘,今天准备做实验,发现删除虚拟机中系统的内容不但没有减少空间,反而增加了,这时我意识到虚拟机内部可能与咱们想象的操作模式不一样. 解决办法 我的 ...

  2. C++不同类中的特征标相同的同名函数

    转载请注明出处,版权归作者所有 lyzaily@126.com yanzhong.lee        作者按:                   从这篇文章中,我们主要会认识到一下几点:      ...

  3. 一个新实验:使用gRPC-Web从浏览器调用.NET gRPC服务

    今天给大家翻译一篇由ASP.NET首席开发工程师James Newton-King前几天发表的一篇博客,文中带来了一个实验性的产品gRPC-Web.大家可以点击文末的讨论帖进行相关反馈.我会在文章末尾 ...

  4. 仅仅知道如何终止XHR请求,或许对你来说是不够的!

    TLDR: 当我们需要的时候,我们可以通过AbortController接口来终止一个或者多个请求. 前言 到目前为止,我们有两个常用的基本的手段去发送请求进而局部刷新页面内容,其一是XMR(XMLH ...

  5. 05-Spring02-AOP

    今日知识 1. AOP 2. AspectJ 3. JdbcTemplate AOP 1. AOP :Aspect Oriented Programming,意为面向切面编程,通过预编译方式和运行期动 ...

  6. VFP 图形文件与剪切板互换的API解决方法

    在 VFP 中,凡遇图形处理,大多数情况下,都会涉及到图形文件与剪切板互换的情况.下面给出利用 API 解决的方法.这是原来从网上摘下来的,版权归原作者.基本处理的代码如下,你可以将其应用到你的代码中 ...

  7. 数据算法 --hadoop/spark数据处理技巧 --(17.小文件问题 18.MapReuce的大容量缓存)

    十七.小文件问题 十八.MR的大容量缓存 在MR中使用和读取大容量缓存,(也就是说,可能包括数十亿键值对,而无法放在一个商用服务器的内存中).本次提出的算法通用,可以在任何MR范式中使用.(eg:MR ...

  8. [Redis-CentOS7]Python操作Redis(十一)

    Python 操作redis #!/usr/bin/env pyhton # coding:utf-8 # @Time : 2020-02-16 21:36 # @Author : LeoShi # ...

  9. 解决 webpack-dev-server 不能使用 IP 访问

    webpack 是众所周知很好用的打包工具,在开发 vue 项目时,vue-cli 就集成了 webpack.我们启一个服务:npm run dev然后在浏览器可是使用 http://localhos ...

  10. Windows AD日志分析平台WatchAD安装教程

    目录 WatchAD介绍 安装环境 WatchAD安装(日志分析端服务) 基础环境配置 安装WatchAD 运行WatchAD WatchAD-web安装(Web监控端服务) 下载WatchAD-We ...