1.1 引入maven依赖
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>6.8.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.8.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>transport-netty4-client</artifactId>
<version>6.8.0</version>
</dependency>
1.2创建索引和类型
Rest的创建方式
// 1.在restful的创建方式
PUT /dangdang
{
"mappings": {
"book":{
"properties": {
"name":{
"type":"text",
"analyzer": "ik_max_word"
},
"age":{
"type":"integer"
},
"sex":{
"type":"keyword"
},
"content":{
"type":"text",
"analyzer": "ik_max_word"
}
}
}
}
}
0. 创建客户端操作对象
//创建ES客户端操作对象
@Test
public void init() throws UnknownHostException {
PreBuiltTransportClient preBuiltTransportClient = new PreBuiltTransportClient(Settings.EMPTY);
preBuiltTransportClient.addTransportAddress(new TransportAddress(
InetAddress.getByName("192.168.202.200"),9300));
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EUi6IMra-1598000722733)(E:/桌面备份/文档/技术资料/elasticsearch 6.8.0全套资料/elasticsearch/笔记/ElasticSearch_6.8.0版本.assets/image-20200702203651495.png)]
1. 创建索引
//创建索引
@Test
public void createIndex() throws UnknownHostException, ExecutionException, InterruptedException {
PreBuiltTransportClient preBuiltTransportClient = new PreBuiltTransportClient(Settings.EMPTY);
preBuiltTransportClient.addTransportAddress(new TransportAddress(
InetAddress.getByName("192.168.202.200"),9300));
//定义索引请求
CreateIndexRequest ems = new CreateIndexRequest("ems");
//执行索引创建
CreateIndexResponse createIndexResponse = preBuiltTransportClient.admin().indices().create(ems).get();
System.out.println(createIndexResponse.isAcknowledged());
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OyMGwkGA-1598000722735)(E:/桌面备份/文档/技术资料/elasticsearch 6.8.0全套资料/elasticsearch/笔记/ElasticSearch_6.8.0版本.assets/image-20200702203936122.png)]
2. 删除索引
//删除索引
@Test
public void deleteIndex() throws UnknownHostException, ExecutionException, InterruptedException {
PreBuiltTransportClient preBuiltTransportClient = new PreBuiltTransportClient(Settings.EMPTY);
preBuiltTransportClient.addTransportAddress(new TransportAddress(
InetAddress.getByName("192.168.202.200"),9300));
//定义索引请求
DeleteIndexRequest ems = new DeleteIndexRequest("ems");
//执行索引删除
AcknowledgedResponse acknowledgedResponse = preBuiltTransportClient.admin().indices().delete(ems).get();
System.out.println(acknowledgedResponse.isAcknowledged());
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CIeaP06L-1598000722737)(E:/桌面备份/文档/技术资料/elasticsearch 6.8.0全套资料/elasticsearch/笔记/ElasticSearch_6.8.0版本.assets/image-20200702203443545.png)]
3 .创建索引和类型
//创建索引类型和映射
@Test
public void init() throws UnknownHostException, ExecutionException, InterruptedException {
PreBuiltTransportClient preBuiltTransportClient = new PreBuiltTransportClient(Settings.EMPTY);
preBuiltTransportClient.addTransportAddress(new TransportAddress(
InetAddress.getByName("192.168.202.200"),9300));
//创建索引
CreateIndexRequest ems = new CreateIndexRequest("ems");
//定义json格式映射
String json = "{\"properties\":{\"name\":{\"type\":\"text\",\"analyzer\":\"ik_max_word\"},\"age\":{\"type\":\"integer\"},\"sex\":{\"type\":\"keyword\"},\"content\":{\"type\":\"text\",\"analyzer\":\"ik_max_word\"}}}";
//设置类型和mapping
ems.mapping("emp",json, XContentType.JSON);
//执行创建
CreateIndexResponse createIndexResponse = preBuiltTransportClient.admin().indices().create(ems).get();
System.out.println(createIndexResponse.isAcknowledged());
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oWwIKJ9R-1598000722738)(E:/桌面备份/文档/技术资料/elasticsearch 6.8.0全套资料/elasticsearch/笔记/ElasticSearch_6.8.0版本.assets/image-20200702205610800.png)]
1.3 索引一条记录
1.指定id索引记录
//索引一条文档 指定id
@Test
public void createIndexOptionId() throws JsonProcessingException {
Emp emp = new Emp("小陈", 23, "男", "这是一个单纯的少年,单纯的我!");
String s = JSONObject.toJSONString(emp);
IndexResponse indexResponse = transportClient.prepareIndex("ems", "emp", "1").setSource(s, XContentType.JSON).get();
System.out.println(indexResponse.status());
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irfeekTQ-1598000722740)(E:/桌面备份/文档/技术资料/elasticsearch 6.8.0全套资料/elasticsearch/笔记/ElasticSearch_6.8.0版本.assets/image-20200702210532815.png)]
2.自定生成id索引记录
//索引一条文档 指定id
@Test
public void createIndexOptionId() throws JsonProcessingException {
Emp emp = new Emp("小白", 23, "男", "这是一个单纯的小白,单纯的我!");
String s = JSONObject.toJSONString(emp);
IndexResponse indexResponse = transportClient.prepareIndex("ems", "emp")
.setSource(s, XContentType.JSON).get();
System.out.println(indexResponse.status());
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6z639E5L-1598000722741)(E:/桌面备份/文档/技术资料/elasticsearch 6.8.0全套资料/elasticsearch/笔记/ElasticSearch_6.8.0版本.assets/image-20200702210643404.png)]
1.4 更新一条索引
//更新一条记录
@Test
public void testUpdate() throws IOException {
Emp emp = new Emp();
emp.setName("明天你好");
String s = JSONObject.toJSONString(emp);
UpdateResponse updateResponse = transportClient.prepareUpdate("ems", "emp", "1")
.setDoc(s,XContentType.JSON).get();
System.out.println(updateResponse.status());
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K8rOvQkn-1598000722742)(E:/桌面备份/文档/技术资料/elasticsearch 6.8.0全套资料/elasticsearch/笔记/ElasticSearch_6.8.0版本.assets/image-20200702210954634.png)]
1.5 删除一条索引
//删除一条记录
@Test
public void testDelete() throws UnknownHostException {
DeleteResponse deleteResponse = transportClient.prepareDelete("ems", "emp", "1").get();
System.out.println(deleteResponse.status());
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YJhCz67a-1598000722743)(E:/桌面备份/文档/技术资料/elasticsearch 6.8.0全套资料/elasticsearch/笔记/ElasticSearch_6.8.0版本.assets/image-20200702211137768.png)]
1.6 批量更新
//批量更新
@Test
public void testBulk() throws IOException {
//添加第一条记录
IndexRequest request1 = new IndexRequest("ems","emp","1");
Emp emp = new Emp("中国科技", 23, "男", "这是好人");
request1.source(JSONObject.toJSONString(emp),XContentType.JSON);
//添加第二条记录
IndexRequest request2 = new IndexRequest("ems","emp","2");
Emp emp2 = new Emp("中国科技", 23, "男", "这是好人");
request2.source(JSONObject.toJSONString(emp2),XContentType.JSON);
//更新记录
UpdateRequest updateRequest = new UpdateRequest("ems","emp","1");
Emp empUpdate = new Emp();
empUpdate.setName("中国力量");
updateRequest.doc(JSONObject.toJSONString(empUpdate),XContentType.JSON);
//删除一条记录
DeleteRequest deleteRequest = new DeleteRequest("ems","emp","2");
BulkResponse bulkItemResponses = transportClient.prepareBulk()
.add(request1)
.add(request2)
.add(updateRequest)
.add(deleteRequest)
.get();
BulkItemResponse[] items = bulkItemResponses.getItems();
for (BulkItemResponse item : items) {
System.out.println(item.status());
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sQ1YxlWa-1598000722744)(E:/桌面备份/文档/技术资料/elasticsearch 6.8.0全套资料/elasticsearch/笔记/ElasticSearch_6.8.0版本.assets/image-20200702211756304.png)]
1.7 检索记录
查询所有并排序
/**
* 查询所有并排序
* ASC 升序 DESC 降序
* addSort("age", SortOrder.ASC) 指定排序字段以及使用哪种方式排序
* addSort("age", SortOrder.DESC) 指定排序字段以及使用哪种方式排序
*/
@Test
public void testMatchAllQuery() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").setQuery(QueryBuilders.matchAllQuery()).addSort("age", SortOrder.DESC).get();
SearchHits hits = searchResponse.getHits();
System.out.println("符合条件的记录数: "+hits.totalHits);
for (SearchHit hit : hits) {
System.out.print("当前索引的分数: "+hit.getScore());
System.out.print(", 对应结果:=====>"+hit.getSourceAsString());
System.out.println(", 指定字段结果:"+hit.getSourceAsMap().get("name"));
System.out.println("=================================================");
}
}
分页查询
/**
* 分页查询
* From 从那条记录开始 默认从0 开始 form = (pageNow-1)*size
* Size 每次返回多少条符合条件的结果 默认10
*/
@Test
public void testMatchAllQueryFormAndSize() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").setQuery(QueryBuilders.matchAllQuery()).setFrom(0).setSize(2).get();
SearchHits hits = searchResponse.getHits();
System.out.println("符合条件的记录数: "+hits.totalHits);
for (SearchHit hit : hits) {
System.out.print("当前索引的分数: "+hit.getScore());
System.out.print(", 对应结果:=====>"+hit.getSourceAsString());
System.out.println(", 指定字段结果:"+hit.getSourceAsMap().get("name"));
System.out.println("=================================================");
}
}
查询返回字段
/**
* 查询返回指定字段(source) 默认返回所有
* setFetchSource 参数1:包含哪些字段 参数2:排除哪些字段
* setFetchSource("*","age") 返回所有字段中排除age字段
* setFetchSource("name","") 只返回name字段
* setFetchSource(new String[]{},new String[]{})
*/
@Test
public void testMatchAllQuerySource() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").setQuery(QueryBuilders.matchAllQuery()).setFetchSource("*","age").get();
SearchHits hits = searchResponse.getHits();
System.out.println("符合条件的记录数: "+hits.totalHits);
for (SearchHit hit : hits) {
System.out.print("当前索引的分数: "+hit.getScore());
System.out.print(", 对应结果:=====>"+hit.getSourceAsString());
System.out.println(", 指定字段结果:"+hit.getSourceAsMap().get("name"));
System.out.println("=================================================");
}
}
term查询
/**
* term查询
*/
@Test
public void testTerm() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
TermQueryBuilder queryBuilder = QueryBuilders.termQuery("name","中国");
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").setQuery(queryBuilder).get();
}
range查询
/**
* rang查询
* lt 小于
* lte 小于等于
* gt 大于
* gte 大于等于
*/
@Test
public void testRange() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age").lt(45).gte(8);
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").setQuery(rangeQueryBuilder).get();
}
prefix查询
/**
* prefix 前缀查询
*
*/
@Test
public void testPrefix() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
PrefixQueryBuilder prefixQueryBuilder = QueryBuilders.prefixQuery("name", "中");
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").setQuery(prefixQueryBuilder).get();
}
wildcard查询
/**
* wildcardQuery 通配符查询
*
*/
@Test
public void testwildcardQuery() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
WildcardQueryBuilder wildcardQueryBuilder = QueryBuilders.wildcardQuery("name", "中*");
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").setQuery(wildcardQueryBuilder).get();
}
Ids查询
/**
* ids 查询
*/
@Test
public void testIds() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
IdsQueryBuilder idsQueryBuilder = QueryBuilders.idsQuery().addIds("1","2");
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").setQuery(idsQueryBuilder).get();
}
fuzzy模糊查询
/**
* fuzzy 查询
*/
@Test
public void testFuzzy() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
FuzzyQueryBuilder fuzzyQueryBuilder = QueryBuilders.fuzzyQuery("content", "国人");
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").setQuery(fuzzyQueryBuilder).get();
}
bool 查询
/**
* bool 查询
*/
@Test
public void testBool() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.should(QueryBuilders.matchAllQuery());
boolQueryBuilder.mustNot(QueryBuilders.rangeQuery("age").lte(8));
boolQueryBuilder.must(QueryBuilders.termQuery("name","中国"));
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").setQuery(boolQueryBuilder).get();
}
高亮查询
/**
* 高亮查询
* .highlighter(highlightBuilder) 用来指定高亮设置
* requireFieldMatch(false) 开启多个字段高亮
* field 用来定义高亮字段
* preTags("<span style='color:red'>") 用来指定高亮前缀
* postTags("</span>") 用来指定高亮后缀
*/
@Test
public void testHighlight() throws UnknownHostException {
TransportClient transportClient = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new TransportAddress(InetAddress.getByName("172.16.251.142"), 9300));
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "中国");
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.requireFieldMatch(false).field("name").field("content").preTags("<span style='color:red'>").postTags("</span>");
SearchResponse searchResponse = transportClient.prepareSearch("dangdang").setTypes("book").highlighter(highlightBuilder).highlighter(highlightBuilder).setQuery(termQueryBuilder).get();
SearchHits hits = searchResponse.getHits();
System.out.println("符合条件的记录数: "+hits.totalHits);
for (SearchHit hit : hits) {
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
System.out.println("================高亮之前==========");
for(Map.Entry<String,Object> entry:sourceAsMap.entrySet()){
System.out.println("key: "+entry.getKey() +" value: "+entry.getValue());
}
System.out.println("================高亮之后==========");
for (Map.Entry<String,Object> entry:sourceAsMap.entrySet()){
HighlightField highlightField = highlightFields.get(entry.getKey());
if (highlightField!=null){
System.out.println("key: "+entry.getKey() +" value: "+ highlightField.fragments()[0]);
}else{
System.out.println("key: "+entry.getKey() +" value: "+entry.getValue());
}
}
}
}