当前位置: 首页 > news >正文

ElasticSearch-学习笔记04【Java客户端操作索引库】

  • Java后端-学习路线-笔记汇总表【黑马程序员】
  1. ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】
  2. ElasticSearch-学习笔记02【ElasticSearch索引库维护】
  3. ElasticSearch-学习笔记03【ElasticSearch集群】
  4. ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】
  5. ElasticSearch-学习笔记05【SpringDataElasticSearch】

目录

01-ES课程介绍

02-使用Java客户端创建索引库

03-使用Java客户端设置mapping步骤

04-使用java客户端设置mapping映射

05-向索引库中添加文档

06-添加文档的第二种方式

07-索引库查询_根据id查询

 08-索引库查询_根据term查询

09-索引库查询_queryString查询

10-查询分页设置

插入数据

设置分页

11-查询结果高亮显示


01-ES课程介绍

学习目标:

  1. 能够使用java客户端完成创建、删除索引的操作

  2. 能够使用java客户端完成文档的增删改的操作

  3. 能够使用java客户端完成文档的查询操作

  4. 能够完成文档的分页操作

  5. 能够完成文档的高亮查询操作

  6. 能够搭建Spring Data ElasticSearch的环境

  7. 能够完成Spring Data ElasticSearch的基本增删改查操作

  8. 能够掌握基本条件查询的方法命名规则

管理ES的客户端工具:postman、head插件。

02-使用Java客户端创建索引库

一、使用Java客户端管理ES
1、创建索引库
    步骤:
    1)创建一个Java工程
    2)添加jar包,添加maven的坐标
    3)编写测试方法实现创建索引库
        1、创建一个Settings对象,相当于是一个配置信息,主要用于配置集群的名称。
        2、创建一个客户端Client对象
        3、使用client对象创建一个索引库
        4、关闭client对象

9201、9202、9203:对外提供http服务的端口号;

9301、9302、9303:tcp形式连接ES服务器(InetSocketTransportAddress方法)。

package com.itheima.es;import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;import java.net.InetAddress;public class ElasticSearchClientTest {@Testpublic void createIndex() throws Exception {//1、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();//2、创建一个客户端Client对象TransportClient client = new PreBuiltTransportClient(settings);//向client中添加三个ip地址的端口号,防止一个服务器不好使然后出现bugclient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301));client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302));client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));//3、使用client对象创建一个索引库client.admin().indices().prepareCreate("index_hello").get();//.get()执行操作//index_hello索引名称//4、关闭client对象client.close();}
}

ElasticSearch搭建集群时的闪退问题

03-使用Java客户端设置mapping步骤

 

一、使用Java客户端管理ES
1、创建索引库
    步骤:
    1)创建一个Java工程
    2)添加jar包,添加maven的坐标
    3)编写测试方法实现创建索引库
        1、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。
        2、创建一个客户端Client对象
        3、使用client对象创建一个索引库
        4、关闭client对象
2、使用Java客户端设置Mappings
    步骤:
    1)创建一个Settings对象
    2)创建一个Client对象
    3)创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象
    4)使用client向es服务器发送mapping信息
    5)关闭client对象

04-使用java客户端设置mapping映射

package com.itheima.es;import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;import java.net.InetAddress;public class ElasticSearchClientTest {@Testpublic void createIndex() throws Exception {//1、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();//2、创建一个客户端Client对象TransportClient client = new PreBuiltTransportClient(settings);//向client中添加三个ip地址的端口号,防止一个服务器不好使然后出现bugclient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301));client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302));client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));//3、使用client对象创建一个索引库client.admin().indices().prepareCreate("index_hello").get();//index_hello索引名称、get()执行操作//4、关闭client对象client.close();}@Testpublic void setMappings() throws Exception {//1、创建一个Settings对象Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();//2、创建一个Client对象,创建一个TransportClient对象TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));//3、创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象/*{"article": {type名称,表名:文章"properties": {"id": {//字段"type": "long","store": true// "index": "not_analyzed"},"title": {"type": "text","store": true,"index": true,"analyzer": "ik_smart"//ik_max_word、standard},"content": {"type": "text","store": true,"index": true,//analyzed"analyzer": "ik_smart"//ik_max_word、standard}}}}*/XContentBuilder builder = XContentFactory.jsonBuilder().startObject().startObject("article")//type名称.startObject("properties").startObject("id").field("type", "long").field("store", true).endObject().startObject("title").field("type", "text").field("store", true).field("analyzer", "ik_smart").endObject().startObject("content").field("type", "text").field("store", true).field("analyzer", "ik_smart").endObject().endObject().endObject().endObject();//4、使用client向es服务器发送mapping信息,使用client把mapping信息设置到索引库中client.admin().indices().preparePutMapping("index_hello")//设置要做映射的索引,设置索引库名称.setType("article")//设置要做映射的type,设置type名称.setSource(builder)//mapping信息,可以是XContentBuilder对象也可以是json格式的字符串.get();//5、关闭client对象,关闭链接client.close();}
}

05-向索引库中添加文档

es集群可以包含多个索引(indices)(数据库),每一个索引可以包含多个类型(types)(表),每一个类型包含多个文档(documents)(行),然后每个文档(数据)包含多个字段(Fields)(列)

一、使用Java客户端管理ES
1、创建索引库
    步骤:
    1)创建一个Java工程
    2)添加jar包,添加maven的坐标
    3)编写测试方法实现创建索引库
        1、创建一个Settings对象,相当于是一个配置信息,主要用于配置集群的名称。
        2、创建一个客户端Client对象
        3、使用client对象创建一个索引库
        4、关闭client对象
2、使用Java客户端设置Mappings
    步骤:
    1)创建一个Settings对象
    2)创建一个Client对象
    3)创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象
    4)使用client向es服务器发送mapping信息
    5)关闭client对象
3、添加文档(一行数据)
    步骤:
    1)创建一个Settings对象
    2)创建一个Client对象
    3)创建一个文档对象,创建一个json格式的字符串或者使用XContentBuilder
    4)使用Client对象吧文档添加到索引库中
    5)关闭client


每一步都要创建一个client对象,所以将client单独提取出来。

package com.itheima.es;import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;import java.net.InetAddress;public class ElasticSearchClientTest {private TransportClient client;@Beforepublic void init() throws Exception {//1、创建一个Settings对象Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();//2、创建一个Client对象,创建一个TransportClient对象client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));}@Testpublic void createIndex() throws Exception {//1、创建一个Settings对象,相当于是一个配置信息,主要配置集群的名称。Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();//2、创建一个客户端Client对象TransportClient client = new PreBuiltTransportClient(settings);//向client中添加三个ip地址的端口号,防止一个服务器不好使然后出现bugclient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301));client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302));client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));//3、使用client对象创建一个索引库client.admin().indices().prepareCreate("index_hello").get();//index_hello索引名称、get()执行操作//4、关闭client对象client.close();}@Testpublic void setMappings() throws Exception {//3、创建一个mapping信息,应该是一个json数据,可以是字符串,也可以是XContextBuilder对象/*{"article": {type名称,表名:文章"properties": {"id": {//字段"type": "long","store": true// "index": "not_analyzed"},"title": {"type": "text","store": true,"index": true,"analyzer": "ik_smart"//ik_max_word、standard},"content": {"type": "text","store": true,"index": true,//analyzed"analyzer": "ik_smart"//ik_max_word、standard}}}}*/XContentBuilder builder = XContentFactory.jsonBuilder().startObject().startObject("article")//type名称.startObject("properties").startObject("id").field("type", "long").field("store", true).endObject().startObject("title").field("type", "text").field("store", true).field("analyzer", "ik_smart").endObject().startObject("content").field("type", "text").field("store", true).field("analyzer", "ik_smart").endObject().endObject().endObject().endObject();//4、使用client向es服务器发送mapping信息,使用client把mapping信息设置到索引库中client.admin().indices().preparePutMapping("index_hello")//设置要做映射的索引,设置索引库名称.setType("article")//设置要做映射的type,设置type名称.setSource(builder)//mapping信息,可以是XContentBuilder对象也可以是json格式的字符串.get();//5、关闭client对象,关闭链接client.close();}@Testpublic void testAddDocument() throws Exception {//1)创建一个Settings对象//2)创建一个Client对象//public void init() throws Exception {...}//3)创建一个文档对象,创建一个json格式的字符串或者使用XContentBuilderXContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("id", 2l)//long型数据 2l.field("title", "Cause I got a crush on you who you~").field("content", "你是我的我是你的谁~").endObject();//4)使用Client对象把文档对象添加到索引库中client.prepareIndex().setIndex("index_hello")//设置索引名称.setType("article")//设置typr.setId("2")//设置文档的id,如果不设置id的话es会自动生成一个id.setSource(builder)//设置文档信息,builder对象或json串.get();//执行操作//5)关闭client客户端client.close();}
}

06-添加文档的第二种方式

一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)

4、添加文档第二种方式
    创建一个pojo类
    使用工具类把pojo转换成json字符串
    把文档写入索引库

@Test
public void testAddDocument2() throws Exception {//创建一个Article对象Article article = new Article();//设置对象的属性article.setId(3l);article.setTitle("再多一眼看一眼就会爆炸~");article.setContent("再近一点靠近点快被融化~");//把article对象转换成json格式的字符串ObjectMapper objectMapper = new ObjectMapper();String jsonDocument = objectMapper.writeValueAsString(article);System.out.println(jsonDocument);//使用client对象把文档写入索引库client.prepareIndex("index_hello", "article", "3").setSource(jsonDocument, XContentType.JSON).get();//关闭客户端client.close();
}

07-索引库查询_根据id查询

一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式

二、使用ES客户端实现搜索
1、根据id搜索
    QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");
2、根据Term查询(关键词)
    QueryBuilder queryBuilder = QueryBuilders.termQuery("title", "北方");
3、QueryString查询方式(带分析的查询)
    QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("速度与激情").defaultField("title");
    查询步骤:
    1)创建一个Client对象
    2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象
    3)使用client执行查询
    4)得到查询的结果
    5)取查询结果的总记录数
    6)取查询结果列表
    7)关闭client

package com.itheima.es;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;import java.net.InetAddress;
import java.util.Iterator;
import java.util.Map;public class SearchIndex {private TransportClient client;@Beforepublic void init() throws Exception {//1、创建一个Settings对象Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();//2、创建一个Client对象,创建一个TransportClient对象client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));}@Testpublic void testSearchById() throws Exception {//1)创建一个client对象//public void init() throws Exception {}//2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");//3)使用client执行查询SearchResponse searchResponse = client.prepareSearch("index_hello").setTypes("article").setQuery(queryBuilder).get();//4)得到查询的结果SearchHits searchHits = searchResponse.getHits();//5)取查询结果的总记录数System.out.println("查询结果总记录数:" + searchHits.getTotalHits());//6)取查询结果列表Iterator<SearchHit> iterator = searchHits.iterator();while (iterator.hasNext()) {SearchHit searchHit = iterator.next();//打印文档对象,以json格式输出System.out.println(searchHit.getSourceAsString());//取文档的属性System.out.println("---------------文档的属性");Map<String, Object> document = searchHit.getSource();System.out.println(document.get("id"));System.out.println(document.get("title"));System.out.println(document.get("content"));}//7)关闭clientclient.close();}
}

 08-索引库查询_根据term查询

package com.itheima.es;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;import java.net.InetAddress;
import java.util.Iterator;
import java.util.Map;public class SearchIndex {private TransportClient client;@Beforepublic void init() throws Exception {//1、创建一个Settings对象Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();//2、创建一个Client对象,创建一个TransportClient对象client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));}private void search(QueryBuilder queryBuilder) throws Exception {//3)使用client执行查询SearchResponse searchResponse = client.prepareSearch("index_hello").setTypes("article").setQuery(queryBuilder).get();//4)得到查询的结果SearchHits searchHits = searchResponse.getHits();//5)取查询结果的总记录数System.out.println("查询结果总记录数:" + searchHits.getTotalHits());//6)取查询结果列表Iterator<SearchHit> iterator = searchHits.iterator();while (iterator.hasNext()) {SearchHit searchHit = iterator.next();//打印文档对象,以json格式输出System.out.println(searchHit.getSourceAsString());//取文档的属性System.out.println("---------------文档的属性");Map<String, Object> document = searchHit.getSource();System.out.println(document.get("id"));System.out.println(document.get("title"));System.out.println(document.get("content"));}//7)关闭clientclient.close();}@Testpublic void testSearchById() throws Exception {//1)创建一个client对象//public void init() throws Exception {}//2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");search(queryBuilder);}@Testpublic void testQueryByTerm() throws Exception {//创建一个QueryBuilder对象//参数1:要搜索的字段//参数2:要搜索的关键词TermQueryBuilder queryBuilder = QueryBuilders.termQuery("title", "爆炸");//执行查询search(queryBuilder);}
}

09-索引库查询_queryString查询

10-查询分页设置

插入数据

@Test
public void testAddDocument3() throws Exception {//批量添加数据for (int i = 4; i < 100; i++) {//创建一个Article对象Article article = new Article();//设置对象的属性article.setId(i);article.setTitle("再多一眼看一眼就会爆炸~" + i);article.setContent("再近一点靠近点快被融化~" + i);//把article对象转换成json格式的字符串ObjectMapper objectMapper = new ObjectMapper();String jsonDocument = objectMapper.writeValueAsString(article);System.out.println(jsonDocument);//使用client对象把文档写入索引库client.prepareIndex("index_hello", "article", i + "").setSource(jsonDocument, XContentType.JSON).get();}//关闭客户端client.close();
}

设置分页

一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式

二、使用ES客户端实现搜索
1、根据id搜索
2、根据Term查询(关键词)
3、QueryString查询方式(带分析的查询)
4、分页的处理
    在client对象执行查询之前,设置分页信息。
    然后再执行查询
     //执行查询
        SearchResponse searchResponse = client.prepareSearch("index_hello")
                .setTypes("article")
                .setQuery(queryBuilder)
                //设置分页信息
                .setFrom(0)
                //每页显示的行数
                .setSize(5)
                .get();
    分页需要设置两个值,一个from、size
    from:起始的行号,从0开始。
    size:每页显示的记录数

11-查询结果高亮显示

一、使用Java客户端管理ES
1、创建索引库
2、使用Java客户端设置Mappings
3、添加文档(一行数据)
4、添加文档的第二种方式

二、使用ES客户端实现搜索
1、根据id搜索
2、根据Term查询(关键词)
3、QueryString查询方式(带分析的查询)
4、分页的处理
5、查询结果高亮显示
(1)高亮的配置
        1)设置高亮显示的字段
        2)设置高亮显示的前缀
        3)设置高亮显示的后缀
(2)在client对象执行查询之前,设置高亮显示的信息
(3)遍历结果列表时可以从结果中取高亮结果

给关键词的前后加上HTML标签作为前后缀。

package com.itheima.es;import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test;import java.net.InetAddress;
import java.util.Iterator;
import java.util.Map;public class SearchIndex {private TransportClient client;@Beforepublic void init() throws Exception {//1、创建一个Settings对象Settings settings = Settings.builder().put("cluster.name", "my-elasticsearch").build();//2、创建一个Client对象,创建一个TransportClient对象client = new PreBuiltTransportClient(settings).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9301)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9302)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9303));}private void search(QueryBuilder queryBuilder) throws Exception {//3)使用client执行查询SearchResponse searchResponse = client.prepareSearch("index_hello").setTypes("article").setQuery(queryBuilder).get();//4)得到查询的结果SearchHits searchHits = searchResponse.getHits();//5)取查询结果的总记录数System.out.println("查询结果总记录数:" + searchHits.getTotalHits());//6)取查询结果列表Iterator<SearchHit> iterator = searchHits.iterator();while (iterator.hasNext()) {SearchHit searchHit = iterator.next();//打印文档对象,以json格式输出System.out.println(searchHit.getSourceAsString());//取文档的属性System.out.println("---------------文档的属性");Map<String, Object> document = searchHit.getSource();System.out.println(document.get("id"));System.out.println(document.get("title"));System.out.println(document.get("content"));}//7)关闭clientclient.close();}private void search(QueryBuilder queryBuilder, String highLightField) throws Exception {HighlightBuilder highlightBuilder = new HighlightBuilder();highlightBuilder.field(highLightField);//高亮显示的字段highlightBuilder.preTags("<em>");//前缀highlightBuilder.postTags("</em>");//后缀//3)使用client执行查询SearchResponse searchResponse = client.prepareSearch("index_hello").setTypes("article").setQuery(queryBuilder)//设置分页信息.setFrom(0)//起始行号从0开始.setSize(5)//每一页显示的行数//设置高亮信息.highlighter(highlightBuilder).get();//4)得到查询的结果SearchHits searchHits = searchResponse.getHits();//5)取查询结果的总记录数System.out.println("查询结果总记录数:" + searchHits.getTotalHits());//6)取查询结果列表Iterator<SearchHit> iterator = searchHits.iterator();while (iterator.hasNext()) {SearchHit searchHit = iterator.next();//打印文档对象,以json格式输出System.out.println(searchHit.getSourceAsString());//取文档的属性System.out.println("---------------文档的属性");Map<String, Object> document = searchHit.getSource();System.out.println(document.get("id"));System.out.println(document.get("title"));System.out.println(document.get("content"));System.out.println("****************************高亮结果");Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();System.out.println(highlightFields);}//7)关闭clientclient.close();}@Testpublic void testSearchById() throws Exception {//1)创建一个client对象//public void init() throws Exception {}//2)创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "2");search(queryBuilder);/*//3)使用client执行查询SearchResponse searchResponse = client.prepareSearch("index_hello").setTypes("article").setQuery(queryBuilder).get();//4)得到查询的结果SearchHits searchHits = searchResponse.getHits();//5)取查询结果的总记录数System.out.println("查询结果总记录数:" + searchHits.getTotalHits());//6)取查询结果列表Iterator<SearchHit> iterator = searchHits.iterator();while (iterator.hasNext()) {SearchHit searchHit = iterator.next();//打印文档对象,以json格式输出System.out.println(searchHit.getSourceAsString());//取文档的属性System.out.println("---------------文档的属性");Map<String, Object> document = searchHit.getSource();System.out.println(document.get("id"));System.out.println(document.get("title"));System.out.println(document.get("content"));}//7)关闭clientclient.close();*/}@Testpublic void testQueryByTerm() throws Exception {//创建一个QueryBuilder对象//参数1:要搜索的字段//参数2:要搜索的关键词TermQueryBuilder queryBuilder = QueryBuilders.termQuery("title", "爆炸");//执行查询search(queryBuilder);}@Testpublic void testQueryStringQuery() throws Exception {//创建一个QueryBuilder对象QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("爆炸").defaultField("title");//执行查询search(queryBuilder, "title");}
}

xxx.xxx.var——快速生成变量。

相关文章:

ElasticSearch-学习笔记04【Java客户端操作索引库】

Java后端-学习路线-笔记汇总表【黑马程序员】ElasticSearch-学习笔记01【ElasticSearch基本介绍】【day01】ElasticSearch-学习笔记02【ElasticSearch索引库维护】ElasticSearch-学习笔记03【ElasticSearch集群】ElasticSearch-学习笔记04【Java客户端操作索引库】【day02】Ela…...

低代码开发平台|制造管理-工艺工序搭建指南

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建制造管理-工艺工序。1.2、应用场景先填充工序信息&#xff0c;再设置工艺路线对应的工序&#xff1b;工序信息及工艺路线列表报表展示的是所有工序、工艺路线信息&#xff0c;可进行新增对应数据的操作。2、设置方法2.1、表…...

Window 安装 Docker

1.开启Hyper-v 2.确定后重启 3.双击安装包进行安装 4.安装完后系统重启 5.打开Docker软件提示&#xff1a;按下图操作后重启Docker 6.设置docker镜像仓库 { “experimental”: false, “features”: { “buildkit”: true }, “registry-mirrors”: [ “https://docker.mirr…...

最近很火的一部电视(狂飙)像安欣和高启强这样类型的人,谁更合适做软件测试工程师

狂飙》央视收视率狂飙。央视发布《狂飙》收视成绩&#xff0c;全剧平均收视1.54%&#xff0c;平均收视份额6.99%&#xff0c;单集最高收视率2.20%&#xff0c;单集最高收视份额10.69%&#xff1b;晚间电视剧类节目第一。可以说还部剧为今年开了个好头&#xff0c;一开年就引爆收…...

LSTM已死,Transformer当立(LSTM is dead. Long Live Transformers! ):上

回想一下在Seq2seq模型中,如何使用Attention。这里简要回顾一下【1】介绍的方法2(并以此为基础展开对Transformer的讨论)。 下图中包含一个encoder(左)和一个decoder(右)。对于decoder来说,给定一个输入,得到输出,如何进一步得到context vector 呢? 我们需要根据和…...

今天面试招了个18K的人,从腾讯出来的果然都有两把刷子···

公司前段时间缺人&#xff0c;也面了不少测试&#xff0c;前面一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在15-20k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试中&#xff0c;不…...

洛谷 P5764 [CQOI2005]新年好

P5764 [CQOI2005]新年好 题目描述 重庆城里有 nnn 个车站&#xff0c;mmm 条双向公路连接其中的某些车站。每两个车站最多用一条公路连接&#xff0c;从任何一个车站出发都可以经过一条或者多条公路到达其他车站&#xff0c;但不同的路径需要花费的时间可能不同。在一条路径上…...

【自然语言处理】主题建模:BERTopic(实战篇)

主题建模&#xff1a;BERTopic&#xff08;实战篇&#xff09;BERTopic 是基于深度学习的一种主题建模方法。201820182018 年底&#xff0c;Devlinetal.Devlin\ et\ al.Devlin et al. 提出了 Bidirectional Encoder Representations from Transformers (BERT)[1]^{[1]}[1]。BER…...

k8s学习笔记

目录 一、安装前准备 二、安装 1、安装kubelet、kubeadm、kubectl 2、使用kubeadm引导集群 1、下载各个机器需要的镜像 2、初始化主节点 3、加入node节点 3、部署dashboard 1、主节点安装 2、设置访问端口 3、创建访问账号 4、令牌访问获取token 三、实战 1、资源创…...

web自动化测试入门篇05——元素定位的配置管理

&#x1f60f;作者简介&#xff1a;博主是一位测试管理者&#xff0c;同时也是一名对外企业兼职讲师。 &#x1f4e1;主页地址&#xff1a;【Austin_zhai】 &#x1f646;目的与景愿&#xff1a;旨在于能帮助更多的测试行业人员提升软硬技能&#xff0c;分享行业相关最新信息。…...

C语言预处理

文章目录 目录 文章目录 前言 一、程序编译的过程 二、编译阶段 1.预处理(*.i&#xff09; 2.编译(*.s) 3.汇编(*.o) 4.链接 总结 前言 提示&#xff1a;使用vs code(gcc编译器)与vs2022来演示c语言的预处理 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面…...

git报错大全,你将要踩的坑我都帮你踩了系列

使用git push -u origin master报下面的错&#xff1a; 使用git push -u origin master报下面的错&#xff1a; Updates were rejected because the remote contains work that you do not have locally&#xff0c;This is usually caused by another repository pushing to …...

LabVIEW中使用.NET方法时出现错误1316

LabVIEW中使用.NET方法时出现错误1316为什么不能调用带有泛型参数的方法&#xff1f;LabVIEW不支持哪些.NET功能&#xff1f;为什么会收到以下错误&#xff1a;发生此错误的原因是正在调用LabVIEW中不支持的.NET功能。有关解决方法&#xff0c;请参阅“其他信息”部分。可以在下…...

HTTP2.0 相比 HTTP1.0、HTTP1.1 有哪些重大改进?值得升级更换吗?

目录 HTTP1.0 HTTP1.1 HTTP2.0 主要特性对比 HTTP发展历史 HTTP2解决的问题 HTTP1.0 HTTP1.1 HTTP2.0...

九、Linux文件 - fopen函数和fclose函数讲解

目录 1.fopen函数 2.fclose函数 3.fopen函数和fclose实战 1.fopen函数 fopen fwrite fread fclose ...属于标准C库 include <stdio.h> standard io lib open close write read 属于Linux系统调用 可移植型&#xff1a;fopen > open&#xff08;open函数只在嵌入…...

轨迹预测算法vectorNet调研报告

前言 传统的行为预测方法是规则的&#xff0c;基于道路结构的约束生成多个行为假设。最近&#xff0c;很多基于学习的预测方法被提出。他们提出了对于不同行为假设的进行概率解释的好处&#xff0c;但是需要重构一个新的表示来编码地图和轨迹信息。有趣的是&#xff0c;虽然高精…...

基于STM32设计的避障寻迹小车

一、前言 1.1 项目背景 根据美国玩具协会在一项研究中&#xff0c;过去几年全球玩具销售增长与GDP的世界平均水平大致相同。但全球玩具市场的内部结构已经占据了巨大的位置变化&#xff1a;传统玩具的市场份额正在下降&#xff0c;高科技电子玩具正在蓬勃发展。全球玩具市场的…...

【视觉检测】使用opencv编写一个图片缺陷检测流程

1. 导入必要的库&#xff0c;如OpenCV&#xff0c;NumPy等。 2. 使用OpenCV读取图像&#xff0c;并将其转换为灰度图像。 3. 使用OpenCV的Canny边缘检测算法检测图像中的边缘。 4. 使用OpenCV的Hough变换算法检测图像中的线条。 5. 使用OpenCV的模板匹配算法检测图像中的缺…...

3.Dockerfile 定制镜像

3. Dockerfile 定制镜像 从上一节的docker commit的学习中&#xff0c;我们可以了解到&#xff0c;镜像的定制实际上就是定制每一层所添加的配置、文件等信息&#xff0c;但是命令毕竟只是命令&#xff0c;每次定制都得去重复执行这个命令&#xff0c;而且还不够直观&#xff…...

Web基础与HTTP协议

Web基础与HTTP协议一、Web基础与HTTP概述1、域名概念二、域名服务与域名注册1、域名定义2、域名服务三、网页访问&#xff08;http、https&#xff09;1、网页概述2、网页的基本标签四、Web1、Web概述2、Web1.0 Web2.0五、HTTP协议概述1、HTTP协议简介2、HTTP协议请求总结一、W…...

【化学试剂】endo-BCN-PEG4-Pomalidomide,(1R,8S,9S)-双环[6.1.0]壬-四聚乙二醇-泊马度胺纯度95%+

一、基础产品数据&#xff08;Basic Product Data&#xff09;&#xff1a;CAS号&#xff1a;N/A中文名&#xff1a;(1R,8S,9S)-双环[6.1.0]壬-四聚乙二醇-泊马度胺英文名&#xff1a;endo-BCN-PEG4-Pomalidomide二、详细产品数据&#xff08;Detailed Product Data&#xff09…...

全板电镀与图形电镀,到底有什么区别?

衔接上文&#xff0c;继续为朋友们分享普通单双面板的生产工艺流程。 如图&#xff0c;第四道主流程为电镀。 电镀的目的为&#xff1a; 适当地加厚孔内与板面的铜厚&#xff0c;使孔金属化&#xff0c;从而实现层间互连。 至于其子流程&#xff0c;可以说是非常简单&#x…...

Zabbix 构建监控告警平台(二)--

Apache监控示例&#xff08;图形监控&#xff09;模板TemplateZabbix Items 1.Apache监控示例&#xff08;图形监控&#xff09; 1.1创建主机组 在“配置”->“主机群组”->“创建主机群组” 填入组名“webserver_test” 创建完成之后可以在“配置”->"主机群组&…...

开学季,关于校园防诈骗宣传,如何组织一场微信线上答题考试

开学季&#xff0c;关于校园防诈骗宣传&#xff0c;如何组织一场微信线上答题考试如何组织一场微信线上答题考试在线考试是一种非常节约成本的考试方式&#xff0c;考生通过微信扫码即可参加培训考试&#xff0c;不受时间、空间的限制&#xff0c;近几年越来越受企事业单位以及…...

蓝牙单点技术实现路径介绍

本文主要介绍蓝牙设备与手机一对一相连的 蓝牙单点 技术。 准备工作 系统要求&#xff1a;蓝牙使用需要安卓 4.3 以及以上版本&#xff0c;智能生活 App SDK 从安卓 4.4 开始支持。Manifest 权限&#xff1a; <uses-permission android:name"android.permission.ACCE…...

Ubuntu22.04 用 `hwclock` 或 `timedatectl` 来设置RTC硬件时钟为本地时区

Ubuntu22.04用 hwclock 或 timedatectl 来设置硬件时区为本地时区 可以用hwclock命令 sudo hwclock --localtime --systohc&#x1f446;效果等同&#x1f447; , --localtime的简写是-l ; --systohc的简写是-w sudo hwclock -l -w也可以用timedatectl命令 &#x1f446;效果…...

Node=>Express路由 学习2

1.概念 Express路由指的是客户端的请求与服务器处理函数之间的映射关系 Express路由由三部分组成 请求类型 请求URL地址 处理函数 app.METHOD ( PATH , HANDLER )根据定义的先后顺序进行匹配 请求类型和请求的URl同时匹配成功才会调用相应的处理函数 简单用法 2.模块化路由 为了…...

Android 面试三部曲——你做到了几点?

今天的干货来点轻松一点的&#xff0c;这次的分享是《面试需要哪些准备&#xff1f;》&#xff0c;主要分为三个部分&#xff1a; 面试前。面试中。面试后。 面试前 1、『工作经验中的职位要层层递进&#xff1a;初、中、高、资深级』&#x1f352; 2.投简历 你的简历必须要…...

windeployqt实现一键打包

每次发布QT程序前,都必须要在命令行环境下运行windeployqt 工具进行打包,加载相关的lib文件,才能正常运行。但是在命令行模式下,每次都要手动输入windeployqt的目录,和应用程序的位置目录,效率非常低,见下图: 那QT有没有什么好用的工具可以避免这个问题呢,认真找了一下…...

ESP32S3系列--SPI主机驱动详解(二)

一、目的 在上一篇《ESP32S3系列--SPI主机驱动详解(一)》我们介绍了ESP32S3的SPI外设的基本情况以及主机驱动的一些知识点,包括主机驱动的特点、总线的初始化、从设备的加入、传输模式分类等等。 本篇我们将从代码角度帮助大家进一步理解传输接口的一些细节问题。 二、实战 …...

微信公众号怎么创建内容/什么是优化师

Q&#xff1a;Mongodb数据服务有什么用&#xff1f; A&#xff1a;首先&#xff0c;Mongodb适合保存大量的非业务数据&#xff0c;因此&#xff0c;Adhesive框架提倡把不是非常重要的非业务数据&#xff08;比如应用程序信息中心的日志、异常、状态数据&#xff0c;又比如WCF扩…...

商城建站流程/设计网站logo

啦啦外卖41.7独立版最新外卖源码全开源 依旧是开源安装版&#xff0c;不是市面上的网站打包的垃圾版本。 包含完整vue源码 安装演示 版本验证 插件列表&#xff1a; vue源码 小程序新接口可以正确获取用户信息&#xff1a;...

室内设计案例分析/seo培训教程视频

课程亮点&#xff1a;一图胜千言&#xff0c;让文科生都能看得懂的python教程&#xff01;&#xff01;&#xff01;另外加详细的笔记作为辅助工具,500多条笔记帮助学员学习Python500多个知识点课程内容&#xff1a;1. Python3语言总体介绍以及环境安装2. Python数据类型(一)-数…...

资海集团网站建设/网站怎么做外链

Mybatis通用Mapper极其方便的使用Mybatis单表的增删改查 2.2.0 新增SqlMapper&#xff0c;可以使用MyBatis直接执行sql&#xff0c;详细文档2.2.0版本之后&#xff0c;通过SqlMapper可以支持多表的操作&#xff0c;但是需要在代码中直接写SQL。 即使不使用通用mapper&#xff0…...

如何备份wordpress主题/淘宝指数查询工具

刚刚入职的时候&#xff0c;做了一个小项目来练手。当时是只知道一点java基础&#xff0c;至于什么框架、数据库&#xff0c;都是在写这个项目的时候碰上了一点一点学起来的。主要的编程方法还是完全参考别人写好的程序段&#xff0c;遇到功能类似和自己项目需求类似的&#xf…...

北京齐力众信网站建设/电商推广和网络推广的区别

---恢复内容开始--- 逻辑控制器&#xff1a;控制执行顺序 simple controller:跟采样器配合&#xff0c;提供一个块的结构和控制。作为一个整体来执行。 loop controller:用${__threadNum}函数来获取当前线程&#xff0c;线程多时执行顺序被打乱。 once only controller:脚本只执…...