Elasticsearch的api使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch的api使用相关的知识,希望对你有一定的参考价值。


本篇文章主要介绍Elasticsearch的java原生api使用。es的下载链接

解压启动window版本的es

https://www.elastic.co/cn/downloads/elasticsearch

我使用的是es的windows版本,解压后,直接双击elasticsearch.bat,启动es。

Elasticsearch的api使用_java


到浏览器,输入网址 http://localhost:9200/ 出现一下界面则说明启动成功。

Elasticsearch的api使用_elasticsearch_02

没啥好说导入依赖

<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.8.0</version>
</dependency>
<!-- elasticsearch 的客户端 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.0</version>
</dependency>
<!-- elasticsearch 依赖 2.x 的 log4j -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<!-- junit 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

</dependencies>

创建索引

public static void main(String[] args) throws IOException 

// 创建客户端对象
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
CreateIndexRequest user = new CreateIndexRequest("china_phone");
CreateIndexResponse response = client.indices().create(user, RequestOptions.DEFAULT);
boolean life = response.isAcknowledged();
System.out.println(life);

// 关闭客户端连接.
client.close();

使用postman指定索引的格式

localhost:9200/china_phone/_mapping

"properties":
"title":
"type":"keyword",
"index":"true"
,
"category":
"type":"keyword",
"index":"true"
,
"images":
"type":"text",
"index":"false"
,
"price":
"type":"float",
"index":"true"







Elasticsearch的api使用_客户端_03

按id查询

package com.example.FristPackage;

import org.apache.http.HttpHost;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;

import java.io.IOException;

public class Get_Info
public static void main(String[] args) throws IOException
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
//1.创建请求对象
GetRequest request = new GetRequest().index("china_phone").id("1025");
//2.客户端发送请求,获取响应对象
GetResponse response = client.get(request, RequestOptions.DEFAULT);
3.打印结果信息
System.out.println("_index:" + response.getIndex());
System.out.println("_type:" + response.getType());
System.out.println("_id:" + response.getId());
System.out.println("source:" + response.getSourceAsString());
client.close();

批量增加

package com.example.FristPackage;

import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;

public class Batch_Add
public static void main(String[] args) throws IOException
// 创建客户端对象
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
//创建批量新增请求对象
BulkRequest request = new BulkRequest();
request.add(new
IndexRequest().index("china_phone").id("1025").source(XContentType.JSON, "title",
"华为", "category", "mate9", "images", "http://www.gulixueyuan.com/xm.jpg", "price", "999.0"));
request.add(new
IndexRequest().index("china_phone").id("1026").source(XContentType.JSON, "title",
"华为", "category", "mate10", "images", "http://www.gulixueyuan.com/xm.jpg", "price", "1999.0"));
request.add(new
IndexRequest().index("china_phone").id("1027").source(XContentType.JSON, "title",
"华为", "category", "mate20", "images", "http://www.gulixueyuan.com/xm.jpg", "price", "3999.0"));
request.add(new
IndexRequest().index("china_phone").id("1028").source(XContentType.JSON, "title",
"华为", "category", "mate20pro", "images", "http://www.gulixueyuan.com/xm.jpg", "price", "4999.0"));
//客户端发送请求,获取响应对象
BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
//打印结果信息
System.out.println("took:" + responses.getTook());
System.out.println("items:" + responses.getItems());
client.close();

更新内容

package com.example.FristPackage;

import org.apache.http.HttpHost;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;

public class Update_Info
public static void main(String[] args) throws IOException
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
//1.创建请求对象
// 修改文档 - 请求对象
UpdateRequest request = new UpdateRequest();
// 配置修改参数
request.index("china_phone").id("1025");
// 设置请求体,对数据进行修改
request.doc(XContentType.JSON, "title", "魅族手机");
// 客户端发送请求,获取响应对象
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println("_index:" + response.getIndex());
System.out.println("_id:" + response.getId());
System.out.println("_result:" + response.getResult());


GetRequest requests = new GetRequest().index("shopping").id("1005");
//2.客户端发送请求,获取响应对象
GetResponse responses = client.get(requests, RequestOptions.DEFAULT);
3.打印结果信息
System.out.println("_index:" + response.getIndex());
System.out.println("_type:" + response.getType());
System.out.println("_id:" + response.getId());
System.out.println("source:" + responses.getSourceAsString());
client.close();

遍历文档

package com.example.FristPackage;

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;

public class Bath_Print
public static void main(String[] args) throws IOException
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
// 创建搜索请求对象
SearchRequest request = new SearchRequest();
request.indices("china_phone");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 查询所有数据
sourceBuilder.query(QueryBuilders.matchAllQuery());
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 查询匹配
SearchHits hits = response.getHits();
System.out.println("took:" + response.getTook());
System.out.println("timeout:" + response.isTimedOut());
System.out.println("total:" + hits.getTotalHits());
System.out.println("MaxScore:" + hits.getMaxScore());
System.out.println("hits========>>");
for (SearchHit hit : hits)
//输出每条查询的结果信息
System.out.println(hit.getSourceAsString());

System.out.println("<<========");
client.close();

按id删除

package com.example.FristPackage;

import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.support.master.AcknowledgedRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;

import java.io.IOException;

public class delte_index
public static void main(String[] args) throws IOException
// 创建客户端对象
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
//创建请求对象
DeleteRequest request = new DeleteRequest().index("china_phone").id("1025");
//客户端发送请求,获取响应对象
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
//打印信息
System.out.println(response.toString());


// 关闭客户端连接.
client.close();

批量删除

package com.example.FristPackage;

import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;

public class Batch_Delete
public static void main(String[] args) throws IOException
// 创建客户端对象
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
//创建批量删除请求对象
BulkRequest request = new BulkRequest();
request.add(new DeleteRequest().index("china_phone").id("1025"));
request.add(new DeleteRequest().index("china_phone").id("1026"));

//客户端发送请求,获取响应对象
BulkResponse responses = client.bulk(request, RequestOptions.DEFAULT);
//打印结果信息
System.out.println("took:" + responses.getTook());
System.out.println("items:" + responses.getItems());
//打印结果信息
System.out.println("took:" + responses.getTook());
System.out.println("items:" + responses.getItems());
client.close();

过滤

package com.example.FristPackage;

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;

public class Findexactly
public static void main(String[] args) throws IOException
// 创建客户端对象
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
// 创建搜索请求对象
SearchRequest request = new SearchRequest();
request.indices("china_phone");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery( "title",
"华为"));
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 查询匹配
SearchHits hits = response.getHits();
System.out.println("took:" + response.getTook());
System.out.println("timeout:" + response.isTimedOut());
System.out.println("total:" + hits.getTotalHits());
System.out.println("MaxScore:" + hits.getMaxScore());
System.out.println("hits========>>");
for (SearchHit hit : hits)
//输出每条查询的结果信息
System.out.println("数据为: "+hit.getSourceAsString());

System.out.println("<<========");
client.close();

自拟定降序和过滤规则

package com.example.FristPackage;

import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;

import java.io.IOException;

public class Sort_And_Filter
public static void main(String[] args) throws IOException
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
// 创建搜索请求对象
SearchRequest request = new SearchRequest();
request.indices("china_phone");
// 构建查询的请求体
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
sourceBuilder.query(QueryBuilders.termQuery( "title","华为"
));
// 排序
sourceBuilder.sort("price", SortOrder.DESC);
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("price");
// 大于等于
rangeQuery.gte("1000");
// 小于等于
rangeQuery.lte("5000");
sourceBuilder.query(rangeQuery);
request.source(sourceBuilder);
SearchResponse response = client.search(request, RequestOptions.DEFAULT);
// 查询匹配
SearchHits hits = response.getHits();
System.out.println("took:" + response.getTook());
System.out.println("timeout:" + response.isTimedOut());
System.out.println("total:" + hits.getTotalHits());
System.out.println("MaxScore:" + hits.getMaxScore());
System.out.println("hits========>>");
for (SearchHit hit : hits)
//输出每条查询的结果信息
System.out.println(hit.getSourceAsString());

System.out.println("<<========");
client.close();


实体类映射

package com.example.FristPackage;

public class Phone
private String title;
private String category;
private String images;
private Double price;

public String getTitle()
return title;


@Override
public String toString()
return "Phone" +
"title=" + title + \\ +
", category=" + category + \\ +
", images=" + images + \\ +
", price=" + price +
;


public void setTitle(String title)
this.title = title;


public String getCategory()
return category;


public void setCategory(String category)
this.category = category;


public String getImages()
return images;


public void setImages(String images)
this.images = images;


public Double getPrice()
return price;


public void setPrice(Double price)
this.price = price;

package com.example.FristPackage;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpHost;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;

public class Mapper
public static void main(String[] args) throws IOException
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("localhost", 9200, "http"))
);
// 新增文档 - 请求对象
IndexRequest request = new IndexRequest();
// 设置索引及唯一性标识
request.index("china_phone").id("1045");
// 创建数据对象
Phone phone=new Phone();
phone.setCategory("k10");
phone.setTitle("红米");
phone.setImages("http://www.gulixueyuan.com/xm.jpg");
phone.setPrice(2945.5);
ObjectMapper objectMapper = new ObjectMapper();
String productJson = objectMapper.writeValueAsString(phone);
// 添加文档数据,数据格式为 JSON 格式
request.source(productJson, XContentType.JSON);
// 客户端发送请求,获取响应对象
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
3.打印结果信息
System.out.println("_index:" + response.getIndex());
System.out.println("_id:" + response.getId());
System.out.println("_result:" + response.getResult());


以上是关于Elasticsearch的api使用的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:使用处理器对数组进行排序

elasticsearch 之 排序查询

WP-API 获取帖子并按降序排列

Elasticsearch的api使用

除了使用Elasticsearch恢复API以外,还有其他方法可以恢复Elasticsearch快照吗?

ElasticSearch的API使用